我正在尝试设置 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 中,我无法使用 中的任何目录/home
。autoindex
它给出权限错误。将目录移动到/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/