Nginx 实现自动文件列表依赖 autoindex 指令而非 index 指令;二者可共存,形成“先找默认页、找不到再列目录”的逻辑,需正确配置 alias/root、权限、autoindex on 及优化参数。

Nginx 的 index 指令本身不会生成文件列表索引,它只负责查找并返回指定的默认文件(如 index.html)。真正实现“自动生成文件列表”的是 autoindex 指令——两者功能不同、不能互相替代,但可以共存于同一 location 块中,形成“先找默认页,找不到再列目录”的逻辑。
要让访问目录时自动显示文件列表,关键不是配置 index,而是启用 autoindex 并确保路径、权限和上下文正确。
✅ 正确启用目录列表(autoindex)
在对应 location 块中开启 autoindex on,并明确指定目录映射方式:
-
使用
alias(推荐):避免路径拼接错误,语义清晰location /files/ { alias /data/public/; autoindex on; autoindex_exact_size off; autoindex_localtime on; }访问
/files/→ 直接列出/data/public/下的文件。 -
使用
root(注意路径拼接):location /files/ { root /var/www; autoindex on; }访问
/files/→ 实际查找/var/www/files/目录。
⚠️ 错误示例:只写
index index.html;却没配autoindex on,目录下无index.html时会返回 403 或 404,不会列目录。
✅ 配合 index 实现“优先默认页, fallback 列表”
如果希望有 index.html 就显示它,没有就列目录,需同时配置二者:
location /public/ {
root /var/www;
index index.html; # 先尝试加载这个文件
autoindex on; # 找不到时才启用列表
autoindex_exact_size off;
autoindex_localtime on;
}行为逻辑:
- 请求
/public/ - Nginx 检查
/var/www/public/index.html是否存在且可读
→ 存在:返回该文件(200)
→ 不存在:检查目录权限,若可读则生成 HTML 列表(200)
→ 目录不可读或无执行权限(x):返回 403
✅ 必须检查的几项前提
-
Linux 目录权限:Nginx 工作进程(如
www-data或nginx用户)必须对目标目录有r-x权限(读 + 执行,执行权限用于进入目录) -
禁止暴露敏感路径:不要在
location / { ... }根块启用autoindex,避免整站目录泄露 -
隐藏危险文件:加 location 规则屏蔽
.htaccess、.log等location ~ \.(htaccess|htpasswd|ini|log|env)$ { deny all; } -
测试与重载:改完配置后务必执行
nginx -t && nginx -s reload
✅ 可选优化体验
-
autoindex_format json;→ 返回 JSON 格式,方便前端调用 -
autoindex_localtime on;→ 显示本地时间而非 UTC -
autoindex_exact_size off;→ 文件大小显示为 KB/MB,更易读
不复杂但容易忽略。


















