目录列表在 nginx 上不起作用,显示 404 错误

目录列表在 nginx 上不起作用,显示 404 错误

因此,我尝试使用 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 不喜欢根目录中的空格,我会很高兴了解原因。

相关内容