

外部に対してポートが80しか開いていない環境を開発者複数で共有するため、パスベースのリバースプロキシをしようと思っています。開発環境なのでサーバーは
WEBrick です。

`http://server/devel1` に接続すると localhost:3000 に、  
`http://server/devel2` に接続すると localhost:3001 に、

飛ぶように設定したいのです。

Twitterで聞いたところ @matsuu さんに

<https://gist.github.com/matsuu/c4b5532075c95401fb9e>

の設定でいけるのでは、と教えていただいたきました。  
試したところ、確かに `http://server/devel1` にアクセスすると WEBrick
で上げたRailsアプリには接続できますが、アプリケーションがちゃんと動いていません。  
Nginxのエラーログを見ると、

[code]

    2015/03/24 23:26:35 [error] 7627#0: *2 open() "/usr/share/nginx/html/rails/info/properties" failed (2: No such file or directory), client: 126.185.134.71, server: localhost, request: "GET /rails/info/properties HTTP/1.1", host: "119.81.181.117", referrer: "http://119.81.181.117/foo/"
    
[/code]

のようなエラーが出ていて、Railsアプリ内のリクエストがROOTを向いてしまっているのが原因のようなのです。  
アプリ側になにか設定が必要なのかなと思うのですが、この環境で動かすだけのためにあまり手を入れたくないというところがあります。  
どのようにするのが適切でしょうか。


CC BY-SA 3.0
2015-03-25T04:30:15.703
8361
2015-07-24T17:34:10.237
2015-03-25T04:40:52.203
182
182
question
ruby-on-rails nginx
Nginxで「開発中の」Railsアプリに対するパスベースのリバースプロキシ


私ならそのような状況ならvirtualhostで対応しますが、パスベースでリバースプロクシを利用する場合は[この質問](https://serverfault.com/q/351701)が参考になるかと思います。

[code]

    location /foo {
        rewrite           ^/foo$ https://example.net/foo/ permanent;
        rewrite           ^/foo/(.*) /$1 break;
        proxy_pass        http://localhost:9000;
    }
    
[/code]

ただし、パスベースだとアプリ内で絶対パスを使うと(工夫すれば問題ないけれど)面倒なのでお勧めできないかと。


CC BY-SA 3.0
2015-03-25T12:51:35.787
8384
2015-03-25T12:51:35.787
2017-04-13T12:14:55.443
-1
2376
8361
answer


railsのバージョンにもよりますが、  
ActionController::AbstractRequest.relative_url_root = '/foo'  
もしくは  
ActionController::Base.relative_url_root = '/foo'  
のような設定を入れるとどうでしょうか。


CC BY-SA 3.0
2015-03-26T14:31:50.333
8446
2015-03-26T14:31:50.333
9037
8361
answer