nginx 在单独的服务器上 proxy_pass 到多个 Rails 应用程序,在不同的盒子中独立的乘客上有子 URI

标签 nginx location uri passenger

我有这个要求,其中有多个 rails 应用程序。每个应用程序都部署在两个应用程序服务器(app1 和 app2)中,并且它们通过单独服务器 (lb) 上的 nginx 进行负载平衡。

lb 框包含没有乘客插件的普通 Vanilla nginx。
rails 应用程序单独部署在乘客站上。

所有的 rails 应用程序都需要在同一个域上运行,但具有不同的 sub_uri,如下所示

http://www.example.com/rails1
http://www.example.com/rails2

I have the lb box nginx configuration something like below.

   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。乘客独自一人的情况下等同于什么?或者我在这里错过了一些基本的东西?任何帮助,建议都会有所帮助。

最佳答案

试试这个,使用 rewrite module :

location /rails2 {
                rewrite "/rails2/" / break;
                proxy_pass http://rails2_cluster;
}

这是一个正则表达式,因此如果 url 实际包含它,则可能会着火。此外,这个还不适用于没有斜杠的地址,所以请检查这个。

关于nginx 在单独的服务器上 proxy_pass 到多个 Rails 应用程序,在不同的盒子中独立的乘客上有子 URI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6622170/

相关文章:

nginx - kubernetes nginx 入口无法将 HTTP 重定向到 HTTPS

python - Tornado nginx websockets 握手 400 错误

node.js - 无法加载资源 : the server responded with a status of 405 (Not Allowed) needs help on nginx. conf

ANDROID:addProximityAlert() 是如何工作的?

android - android中的网络提供商?

android - 为什么无法访问 Android 命名空间 URI?

swift - 如何使用 Swift/AWSAppSync 从临时目录获取 localUri

javascript - 如何验证和清理要用作 URL 一部分的任意字符串输入的输入

nginx - 使用 nginx 作为代理到 java web servlet

android - 设置每个 GPS 定位之间的间隔