单独服务器上的 nginx proxy_pass 到多个 Rails 应用程序,乘客独立在不同的盒子中具有子 URI
Posted
技术标签:
【中文标题】单独服务器上的 nginx proxy_pass 到多个 Rails 应用程序,乘客独立在不同的盒子中具有子 URI【英文标题】:nginx on separate server proxy_pass to multiple rails apps with sub URI on passenger standalone in different boxes 【发布时间】:2011-10-01 02:51:15 【问题描述】:我有这个要求,其中有多个 Rails 应用程序。每个应用程序部署在两个应用服务器(app1 和 app2)中,并通过单独的服务器 (lb) 上的 nginx 进行负载平衡。
lb 盒子包含没有乘客插件的普通 nginx。 Rails 应用程序单独部署在乘客站上。
所有 Rails 应用程序都需要在同一个域上运行,但 sub_uri 不同,如下所示
http://www.example.com/rails1 http://www.example.com/rails2我有类似下面的 lb box nginx 配置。
http
...
upstream rails1_cluster
ip_hash;
server app1.server:3001;
server app2.server:3001;
upstream rails2_cluster
ip_hash;
server app1.server:3002;
server app2.server:3002;
...
server
server_name www.example.com;
...
...
location /rails1
proxy_pass http://rails1_cluster;
...
location /rails2
proxy_pass http://rails2_cluster;
...
....
使用此设置,在 app1 和 app2 中独立于乘客上运行的应用会抛出无法找到任何路线 /rails1/ 的错误。
这篇文章"How To Deploy Phusion Passenger To A Subdirectory, Routing Errors, And Restarting" 试图解决同样的问题,但它建议更改路线,我不希望这样做。正在处理的 Rails 应用程序具有相同的代码库,但针对满足特定客户的特定实例进行了定制。
在 Nginx 服务器的乘客插件中,有一个 Passenger_base_uri 有助于为应用设置子 URI。在乘客独立的情况下,相同的等价物是多少?还是我在这里遗漏了一些基本的东西?任何帮助,建议都会有所帮助。
【问题讨论】:
【参考方案1】:试试看,使用rewrite module:
location /rails2
rewrite "/rails2/" / break;
proxy_pass http://rails2_cluster;
这是一个正则表达式,所以如果 url 实际包含它,它可能会着火。此外,这个还不适用于没有斜杠的地址,所以检查一下。
【讨论】:
以上是关于单独服务器上的 nginx proxy_pass 到多个 Rails 应用程序,乘客独立在不同的盒子中具有子 URI的主要内容,如果未能解决你的问题,请参考以下文章
使用 nginx proxy_pass 修改 Location 标头
nginx 中location和proxy_pass后面跟“/”组合后产生访问情况
Linux下Nginx服务Rewrite和Proxy_Pass
windows服务器nginx配置 使用proxy_pass windows server2008 配置vue与python后端 端口放行