我有这个要求,其中有多个rails应用程序。每个应用程序都部署在两个应用程序服务器(app1和app2)中,并通过单独的服务器(lb)上的nginx进行负载平衡。
lb包含普通香草nginx,没有乘客插件。 导轨应用仅部署在乘客座位上。
所有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。在乘客站立的情况下,相同的是什么?或者我错过了一些基本的东西?任何帮助,建议都会有所帮助。
答案 0 :(得分:0)
尝试使用rewrite module:
尝试一下location /rails2 {
rewrite "/rails2/" / break;
proxy_pass http://rails2_cluster;
}
这是一个正则表达式,所以如果url实际上包含它,可能会起火。此外,对于没有尾部斜杠的地址,这个还没有用,所以请检查一下。