Nginx 是否需要根目录的索引文件?

Nginx 是否需要根目录的索引文件?

我正在开发一个 Rails 应用程序,现在将生产环境设为默认环境。我创建了以下指令

server {
    listen 127.0.0.1:80;
    server_name example.com;
    root /web/applications/dashboard/public;
    index index.html;

    location / {
        try_files $uri $uri/ @app;
    }
    location @app {
        proxy_set_header host $Host;
        proxy_redirect off;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_pass http://dashboard;
    }
}

当我尝试访问我的应用程序的 URL 时,出现了错误。目录中403 Forbidden没有。index.htmlpublic

如果我添加指令

location ~ ^/(assets)/  {
  gzip_static on; # to serve pre-gzipped version
  expires max;
  add_header Cache-Control public;
}

并将@app指令更改为/,一切都运行正常。

我需要index.html在根目录中定义吗?我理想情况下不希望发生这种情况,而是直接转到应用程序。

编辑:这里有一个相关条目来自error.log

2013/11/29 07:38:08 [error] 30796#0: *1570 directory index of "/web/applications/dashboard/public/" is forbidden, client: '', server: example.com, request: "GET / HTTP/1.1", host: "example.com"

该文件夹的权限为:

...
drwxr-xr-x  3 joshua joshua 4096 Nov 29 07:15 public
...

答案1

我会$uri/从中删除try_files。由于您不会index.html直接提供任何文件,因此没有必要让它存在,并且它是导致此错误的直接原因,如果不是根本原因的话。留给你的是:

try_files $uri @app;

哦,请确保您设置了一条路线config/routes.rb...

相关内容