我正在开发一个 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.html
public
如果我添加指令
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
...