Rails6:带有 NGINX passenger 的多个应用程序不服务来自子 URI 的 POST 请求

Rails6 : Multiple applications with NGINX passenger not serving POST requests from sub-URIs

我想 运行 在同一台服务器上使用 NGINX 和 Passenger 的两个子 URI 上的两个 Rails6 应用程序。根是静态的 index.html.

索引页面从根目录正确加载。当访问子 URI 时,Rails 应用程序的根视图也是如此。但是,后续表单提交抛出 404.

两个应用程序 运行 当我 运行 它们在根目录 (/) 而不是静态索引页时都很好。

配置文件是 sites-enabled 文件夹有--

server {
        listen 80;

        server_name _;
        passenger_enabled on;
        passenger_ruby /usr/bin/ruby;
        passenger_app_env development;

        location / {
                root /var/www/html;
        }

        location ~ ^/rbf(/.*|$) {
                alias /var/www/rails6-bootstrap-flatpickr/public;
                passenger_base_uri /rbf;
                passenger_app_root /var/www/rails6-bootstrap-flatpickr;
                passenger_document_root /var/www/rails6-bootstrap-flatpickr/public;
        }

        location ~ ^/cdb(/.*|$) {
                alias /var/www/dashboard/public;
                passenger_base_uri /cdb;
                passenger_app_root /var/www/dashboard;
                passenger_document_root /var/www/dashboard/public;
        }
        
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
}

NGINX 访问日志有如下一行(我已经用 aaa.bbb.ccc.ddd 替换了我的 ip 地址)

[19/Nov/2020:12:00:59 +0000] "POST /display_router HTTP/1.1" 404 209 "http://aaa.bbb.ccc.ddd/cdb" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36"

在开发过程中,我让每个应用程序 运行 在其自己的 Rails 服务器上。 表单定义为:

<%= form_with(url: "/process_dates") do %>

<%= form_with(url: "/display_router") do %>

表单分别发布到根文件夹 /process_dates 和 /display_router。 但是在云服务器上,每个应用程序都在自己的文件夹中,即 rails 根目录。

所以我只是将云服务器上的表单定义更改为

<%= form_with(url: "/rbf/process_dates") do %>

<%= form_with(url: "/cdb/display_router") do %>

成功了。