多个 Rails 应用程序通过 NGINX(反向代理)

Multiple Rails apps over NGINX (reverse proxy)

我的服务器上有两个 rails 应用程序。他们每个人都在瘦服务器上 运行。我也在使用 NGINX。这是我的 NGINX 配置文件:

server{

location /blog {
   proxy_pass http://127.0.0.1:8082;
    proxy_set_header Host $host;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";

}
location /website1 {
    proxy_pass http://127.0.0.1:3000;
    proxy_set_header Host $host;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
}
}

"http://HOST/blog" => 我收到 404 错误(空白页)

"http://[HOST]/website1" => 我的 Rails 应用出现 404 错误,在我的应用日志中我得到:

 INFO -- : Started GET "/website1"
 FATAL -- : ActionController::RoutingError (No route matches [GET] "/website1")

这是怎么回事???

我尝试将网站 1 的位置设置为“/”,将博客设置为“/blog”。在这种情况下,website1 运行完美,但我仍然在博客上收到 404(空白页,而不是 rails)。

有什么想法吗?谢谢你的帮助!

我不喜欢将多个配置放在一个文件中,另外,您最好使用虚拟主机。只需将假域名添加到您的主机文件中即可。以下是您的处理方式:

http://articles.slicehost.com/2009/4/17/centos-nginx-rails-and-thin

我要补充的是,我喜欢将每个服务器配置放在自己的文件中,并将其命名为 domain1.com_server.conf

更新:

我试过你的配置,它有效。正如其他答案所建议的那样,我更改的唯一部分是在末尾添加/。您可能还有其他问题。这就是我将您指向博客 post 的原因。你这样做的方式有问题,但如果你解决它们就可以了。例如,您需要告诉 Rails 您不在根域中 运行,而是在 /website1 或 /blog。您还需要修复所有假设资源路径从根开始的 html 链接。这就是虚拟主机提供更清洁解决方案的原因。

尝试在代理传递中添加尾部斜杠。喜欢:

proxy_pass http://127.0.0.1:8082/;
proxy_pass http://127.0.0.1:3000/;

from(一个请求URI传给服务器如下):http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_pass

为了进一步解释您收到 404 的原因,rails 看到的是排除尾部斜杠后的完整路径(例如 http://HOST/website1 -> /website1 & http://HOST/blog -> /blog). It sounds like the rails routing for both apps is not expecting a prefix. By including the trailing slash in the proxy pass line, your urls will get transform such that http://HOST/website1/ becomes the root path(/) on the rails side. You may also need proxy_redirect default; if you have issues with rails redirects not working. See: http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_redirect