nginx 自动索引问题

nginx 自动索引问题

我正在尝试设置 nginx,以便某个 URL 生成我服务器上某个目录的目录索引。目前这是我的 default.conf 的样子。

    location / {
        root   /usr/share/nginx/html;
        index  index.html index.htm;
    }

    location /files/ {
        root        /home/myfiles/Downloads;
        autoindex   on;
    }

但是,当我尝试访问 mysite.com/files/ 或 mysite.com/files 时,出现 403 Forbidden 错误。

查看错误日志,我看到

2012/01/08 16:23:18 [error] 17619#0: *1 "/home/myfiles/Downloads/files/index.html" is forbidden (13: Permission denied), client: some.ip.addr.ess, server: _, request: "GET /files/ HTTP/1.1",

我不希望它搜索 files/index.html,我只想要下载的目录索引。我需要做哪些更改才能让事情以这种方式工作?

答案1

检查 Nginx 是否执行父目录树中所有目录的权限。在您的例子中,Nginx 应该对//home、具有执行权限/home/myfiles/home/myfiles/Downloads否则 Nginx 无法 chdir 到这些目录。

检查这一点的一个简单方法是运行namei -l /home/myfiles/Downloads

答案2

在这种情况下,您需要使用alias指令而不是root

使用 时root,请求mysite.com/files/将在本地目录中查找/home/myfiles/Downloads/files/索引文件,如果未找到,则会自动生成目录列表(因为您已指定该autoindex选项)。请注意 nginx 如何附加 /files/到您指定的根目录。

由于您的情况是希望/files/成为下载目录的同义词,因此需要alias /home/myfiles/Downloads/在位置块中使用。然后,任何对的请求mysite.com/files/都将被翻译为目录/home/myfiles/Downloads/(例如mysite.com/files/bigfile.gz将变为)。请注意,别名后面的/home/myfiles/Downloads/bigfile.gz空格是必需的。/

查看文档http://wiki.nginx.org/HttpCoreModule#alias有关别名的更多详细信息。

答案3

您好,我也有自动索引错误。顺便提一句:我使用第三方 repo 安装 nginx。

首先我只检查自动索引

/opt/tengine/sbin/nginx -V 2>&1 | grep auto

[root@sec002 tengine]# /opt/tengine/sbin/nginx -V 2>&1 | grep auto
            ngx_http_autoindex_module (static)

我的服务器配置

server {
    listen 8082;
    server_name sec002.xxx.com;
    root /tmp;
    autoindex on;
    location / {
        root /tmp/php/;
        autoindex on;
        autoindex_exact_size off;
        autoindex_localtime on;
    }
}

我浏览sec002.xxx.com:8082,出现以下错误:

2016/01/07 16:09:26 [error] 4205#0: *1 "/tmp/php/index.html" is not found (2: No such file or directory), client: 192.168.2.13, server: sec002.xxx.com, request: "GET / HTTP/1.1", host: "sec002.xxx.com:8082"

我保证执行权限nginx 用户是对的,这很奇怪

最后我放弃了,用默认的 tar 包重新构建了 nginx。然后工作

答案4

在 Ubuntu 中,我无法使用 中的任何目录/homeautoindex它给出权限错误。将目录移动到/var/www解决了该问题。

这是我的/etc/nginx/nginx.conf静态文件服务配置:

events {
        worker_connections 768;
}

http {
    server {
        listen 80 backlog=4096;
        root /var/www/nginx-file-server-folder/;
        location / {
            autoindex           on;
            sendfile            on;
            sendfile_max_chunk  1m;
            tcp_nopush          on;
            keepalive_timeout   65;
            tcp_nodelay         on;
        }
    }
}

参考:https://docs.nginx.com/nginx/admin-guide/web-server/serving-static-content/

相关内容