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 %>
成功了。
我想 运行 在同一台服务器上使用 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 %>
成功了。