将passenger_base_uri传递给Rails应用程序

我们构build了一个由以下path组成的Rails应用程序:

namespace :api do namespace :v1 do resources ... end end 

这意味着所有的控制器都可以通过www.url.com/api/v1/controller进行访问。 要在根域下运行独立的web应用程序,我有以下本地nginx设置:

 server { listen 8080; server_name localhost; location / { root /Users/swramba/Sites; index index.html index.htm; } location ~ /api { proxy_pass http://127.0.0.1:3000; } } 

这意味着, /api下的所有东西都被代理到用于开发的WEBrick服务器。 现在,在我们的生产环境中,我们想用类似的设置来使用Phusion Passenger。 所以,我为生产nginx写了下面的configuration文件:

 server { listen 80; server_name localhost; root /home/someuser/sites/web/www.myapp.com; passenger_base_uri /api; passenger_enabled on; rails_env production; } 

但是,这意味着/api部分从URL中剥离,Rails返回404,因为找不到/v1/something

我怎样才能让nginx或Passenger不会忽略URL中的/api ,使URL与开发中的一样?

我也尝试设置config.relative_url_root = "/api"但是这没有任何效果。

我可以弄明白。 这实际上是正确的configuration:

 server { listen 80; server_name localhost; location / { root path/to/some_html_webapp; } location ~ /api { root path/to/rails_app/public; passenger_enabled on; rails_env production; } } 

这样,URL就不会被修改,但是Passenger会在特定的path上接pipe。