NGINX上的多个Rails应用程序(反向代理)

我的服务器上有两个rails应用程序。 它们中的每一个都在瘦服务器上运行。 我也在使用NGINX。 这是我的NGINX配置文件:

server{ location /blog { proxy_pass http://127.0.0.1:8082; proxy_set_header Host $host; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; } location /website1 { proxy_pass http://127.0.0.1:3000; proxy_set_header Host $host; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; } } 

“ http:// HOST / blog ”=>我收到404错误(空白页)

“ http:// [HOST] / website1 ”=>我的Rails应用程序出现404错误,在我的应用程序日志中得到:

  INFO -- : Started GET "/website1" FATAL -- : ActionController::RoutingError (No route matches [GET] "/website1") 

怎么了???

我尝试在“/”上设置网站1的位置,在“/ blog”上设置博客。 在这种情况下,website1运行完美,但我仍然在博客上获得404(空白页,而不是一个rails)。

任何的想法? 谢谢你的帮助!

尝试向代理传递添加尾部斜杠。 喜欢:

 proxy_pass http://127.0.0.1:8082/; proxy_pass http://127.0.0.1:3000/; 

from(请求URI按如下方式传递给服务器): http : //nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_pass

为了进一步解释为什么你得到404s,当排除尾部斜杠时,rails会看到完整路径(例如http:// HOST / website1 – > / website1& http:// HOST / blog – > / blog)。 这听起来像两个应用程序的rails路由不期望前缀。 通过在代理传递行中包含尾部斜杠,您的URL将进行转换,使得http:// HOST / website1 /成为rails侧的根路径(/)。 您可能还需要proxy_redirect default; 如果你有rails重定向无法正常工作的问题。 请参阅: http : //nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_redirect

我不喜欢在一个文件中放置多个配置,而且,最好使用虚拟主机。 只需将假域添加到您的主机文件中即可。 这是你如何去做的:

http://articles.slicehost.com/2009/4/17/centos-nginx-rails-and-thin

我将补充说,我喜欢将每个服务器配置放在自己的文件中,并将其称为domain1.com_server.conf

更新:

我尝试了你的配置,它的工作原理。 我改变的唯一部分是在最后添加/作为其他答案建议。 你可能还有其他问题。 这就是为什么我指向你的博客文章。 你做这件事的方式有问题,但如果你修复它们就没问题。 例如,您需要告诉Rails您没有在根域运行,而是在/ website1或/ blog运行。 您还需要修复假设资源路径从根开始的任何html链接。 这就是虚拟主机提供更清洁解决方案的原因。