我有 3 个域名,并尝试使用 Nginx 在一台服务器(Digital Ocean Droplet)上托管所有 3 个站点。
mysite1.名称 mysite2.名称 mysite3.name
其中只有 1 个有效。另外两个会导致 403 错误(方式相同)。
在我的 nginx 错误日志中,我看到:[错误] 13108#0: *1 “/usr/share/nginx/mysite2.name/live/”的目录索引被禁止
。
我的站点启用配置是:
server {
server_name www.mysite2.name;
return 301 $scheme://mysite2.name$request_uri;
}
server {
server_name mysite2.name;
root /usr/share/nginx/mysite2.name/live/;
index index.html index.htm index.php;
location / {
try_files $uri $uri/ /index.html index.php;
}
location ~ \.php$ {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
include fastcgi_params;
}
}
所有 3 个站点都有几乎相同的配置文件。
每个站点的文件都位于/usr/share/nginx/mysite1.name/someFolder 等文件夹中,然后/usr/share/nginx/mysite1.name/live 是该文件夹的符号链接(symbolic link)。 (对于 mysite2 和 mysite3 也是如此。)
我看过Nginx 403 forbidden for all files但这没有帮助。
对可能出现的问题有什么想法吗?
最佳答案
如果您关闭了目录索引,并且遇到了此问题,可能是因为您使用的 try_files 有一个目录选项:
location / {
try_files $uri $uri/ /index.html index.php;
} ^ that is the issue
删除它,它应该可以工作:
location / {
try_files $uri /index.html index.php;
}
为什么会发生这种情况
TL;DR:这是因为nginx会尝试索引该目录,并被自身阻止。抛出OP提到的错误。
try_files $uri $uri/
表示从根目录尝试 uri
指向的文件,如果该文件不存在,则尝试使用目录(因此/
)。当nginx访问一个目录时,它会尝试对其进行索引并将其中的文件列表返回给浏览器/客户端,但是默认情况下目录索引是禁用的,因此它会返回错误“Nginx 403错误:[文件夹]的目录索引”是被禁止的”。
目录索引由autoindex
选项控制:https://nginx.org/en/docs/http/ngx_http_autoindex_module.html
关于configuration - Nginx 403 错误 : directory index of [folder] is forbidden,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19285355/