用于 rails subdir 部署的 nginx 配置

用于 rails subdir 部署的 nginx 配置

我在配置 nginx 以提供 Rails 应用程序的静态文件时遇到了很多麻烦;我指的是应用程序文件public/夹中的所有文件,而不仅仅是 Rails 资产管道中的文件。似乎我能够让大部分工作正常进行,但我不知道如何将所有内容放在一起。我的应用程序安装在服务器 ( /dashboard) 上的子目录中,而不是 Web 根目录中。

以下是我的各种配置文件的摘录:

config.ru

map Dashboard::Application.config.relative_url_root || "/" do
  run Rails.application
end

环境/生产.rb

config.relative_url_root = "/dashboard"
config.assets.prefix = "/dashboard/assets/"

nginx.conf

location /dashboard/ {

    root /srv/XXX/dashboard/public;

    location /dashboard/assets/ {
        gzip_static on;
        expires max;
        add_header Cache-Control public;
    }

    try_files $uri @unicorn;

    error_page 500 502 503 504 /500.html;
    client_max_body_size 4G;
    keepalive_timeout 10;
}

location @unicorn {
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Real-IP  $remote_addr;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_set_header Host $http_host;
    proxy_redirect off;
    proxy_pass http://unicorn_server;
}

upstream unicorn_server {
    server unix:/srv/XXX/dashboard/tmp/sockets/unicorn.sock fail_timeout=0;
}

通过此配置,我能够使用 unicorn 为 Rails 应用程序本身提供服务,并public/assets/使用 nginx 为文件夹中的文件提供服务,但文件夹中的其余文件public/将路由到 Rails,最终返回 404 状态代码。我知道这是因为服务器正在寻找(例如)文件夹/dashboard/robots.txt中不存在的内容public/。我相信我需要使用alias来操纵路径,但我无法将所有内容放在一起,让 Rails 正确地为应用程序提供服务,让 nginx 为静态文件提供服务。

相关内容