首页 > 解决方案 > Nginx 反向代理而不是目录列表

问题描述

我试图让 nginx 提供静态内容,同时将其他所有内容反向代理到 rails 服务器。

所有这些都有效,除了主页。如果我访问 example.com,我会收到 403 错误,并且错误日志显示

2019/06/14 04:32:59 [error] 9746#9746: *1 directory index of "/var/www/html/" is forbidden

我希望将请求作为 example.com/ 发送到 rails 服务器,而不是尝试(并且失败)获取目录列表。rails 服务器应该显示一个主页。(旁注:如果我打开自动索引,我会得到一个目录列表)

配置在这里:

server {
        listen 80 default_server;
        listen [::]:80 default_server;
        root /var/www/html;
        server_name example.com;
        index index.html;
        location / {
            autoindex off;
            root /var/www/html;
            try_files $uri $uri/ @rails;
            expires max;
            access_log off;
        }
        location @rails {
            proxy_set_header X-Real-IP  $remote_addr;
            proxy_set_header X-Forwarded-For $remote_addr;
            proxy_set_header Host $host;
            proxy_pass http://127.0.0.1:3000;
        }

}

标签: ruby-on-railsnginxreverse-proxy

解决方案


主页的修复方法是为主页添加精确location值,如下所示:

    location = / {
        try_files @rails =404;
    }

推荐阅读