Ruby on rails Nginx反向代理而不是目录列表

Ruby on rails Nginx反向代理而不是目录列表,ruby-on-rails,nginx,reverse-proxy,Ruby On Rails,Nginx,Reverse Proxy,我试图让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服务器应该显示一个主页。(旁

我试图让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;
        }

}

主页的修复方法是为主页添加一个准确的
位置
,如下所示:

    location = / {
        try_files @rails =404;
    }

如果要禁用所有uri的
索引
行为,请从
try\u files
语句中删除
$uri/
术语。例如:

location / {
    try_files $uri @rails;
    ...
}
location = / { 
    try_files nonexistant @rails; 
}
有关详细信息,请参阅


或者,添加新的位置块以专门处理URI
/
,例如:

location / {
    try_files $uri @rails;
    ...
}
location = / { 
    try_files nonexistant @rails; 
}

有关详细信息,请参阅。

我认为这不起作用,因为rails可以为任何内容提供页面。所以它不会检查静态资产。(IOW:要么你先检查rails,rails提供一切服务,要么你先检查文件,在这种情况下,你需要以某种方式排除目录列表,Richard Smith的答案就是这样)@xyious Richard的答案肯定更正确,但请注意,他包括为主页添加与我的答案类似的精确匹配。请注意,我的精确匹配只处理
/
。我误解了您的解决方案。“=”非常重要,我掩盖了这一点。我必须考虑哪一个更适合我要做的,但是是的,你是对的。