因此,我尝试使用 nginx 在我的服务器上设置目录列表,我按照说明一步一步进行操作,但没有任何效果 - 总是显示 403 或 404 错误,而权限全部设置为 755...
当我在根位置启用自动索引时,它工作正常,但是当我将其放在“dl /”位置时,它在请求/ dl时显示404,或者在请求/ dl /时显示403
在我按照@Bryce Larson 的步骤操作之后...403 已经消失了,现在只剩下 404...这仍然不行...
# pwd
/root/Downloads/dl
# ls -lha
total 12K
drwxr-xr-x 2 nginx root 4.0K Nov 25 20:01 .
drwxr-xr-x 4 root root 4.0K Nov 26 09:11 ..
-rwxr-xr-x 1 nginx root 26 Nov 25 20:01 blah.txt
这是nginx.conf
:
https://0bin.net/paste/he2oIb2OFou4G9Fd#v5qt5M7scM8jlSRkl9B+GepP+PoInAHrfZrJNJ7Ch9U
是的,我已经重新启动了 nginx 一百次,只是为了确保它采用了新的配置...那么现在出了什么问题?
否则,您将如何配置 nginx 服务器以实现此目的?
答案1
我最终自己找到了解决方案!
因此要指定location
使用 root 权限,你必须指定父目录而不是您计划提供的目录。
因此,如我的示例所示,我应该/root/Downloads
使用 root 参数进行指定,然后服务器将尝试dl
在其中找到一个目录。
我确实记得尝试过这种方式,但@Bryce Larson 提到的权限问题可能是它没有成功的原因。
这里这是最后一个,nginx.conf
以防人们感兴趣。相关行如下:
location /dl/ {
root /root/Downloads;
autoindex on;
}
结论:
在 nginx 中设置目录列表的正确方法是:
- 指定您尝试提供的目录的父目录。
- 确保从
/
您尝试提供服务的目录的所有权限都设置为可执行,即chmod +X -R .
答案2
如果您从 root 的主目录提供服务,请确保目录对从 root (/) 到您提供服务的目录的每个目录都具有执行权限。默认情况下,root 通常在主目录上具有 700 个权限。“cd”到该目录需要目录上的执行权限,如果 nginx 在其下运行的用户不允许目录上的执行权限,则 nginx 无法执行此操作。
还:
chmod +X -R .
非常有用,因为它只更改目录权限而不更改文件,请参阅: https://www.franzoni.eu/chmod-and-the-capital-x/
答案3
对于那些偶然发现此线程的人来说,因为他们也遇到了 404(像我一样),但无法使用上述解决方案解决它:
当指定的根目录包含空格时,即使正确转义,它似乎也autoindex on;
不起作用。
在我的测试中,以下操作不起作用:
server {
listen 80;
servername downloads.myserver.com;
location / {
# notice escaped space character here:
root /mnt/mydrive/test\ test/;
autoindex on;
}
}
但这确实有效:
server {
listen 80;
servername downloads.myserver.com;
location / {
# notice no escaped space character here:
root /mnt/mydrive/testtest/;
autoindex on;
}
}
如果有人知道为什么 nginx 不喜欢根目录中的空格,我会很高兴了解原因。