要让nginx显示目录下的文件列表,核心是启用autoindex on,并确保路径(推荐alias)、权限(r-x逐级)和作用域(location内显式配置)三者匹配;还需添加charset utf-8、autoindex_localtime on、autoindex_exact_size off优化显示,并清除index指令干扰。

要让 Nginx 显示目录下的文件列表,核心是启用 autoindex on,并确保它能准确找到你要列的物理目录——不是加一行就生效,而是路径、权限、作用域三者都得对。
配对 location 和 alias(推荐)
用 alias 比 root 更直观、更少出错:
-
location /files/ { alias /data/shared/; autoindex on; } → 访问
/files/就直接对应磁盘上/data/shared/ - alias 后的路径末尾必须带斜杠(
/data/shared/),否则 Nginx 会拼错路径,导致 404 或 403 - location 的 URI 也必须以
/结尾,比如/files/,不能写成/files,否则不触发索引
调优显示效果
默认列表太原始,加几行就能明显提升可读性:
-
autoindex_localtime on;:时间显示服务器本地时区(前提是系统已设对,如timedatectl set-timezone Asia/Shanghai) -
autoindex_exact_size off;:文件大小显示为2.1M、15.8G,而非一长串字节数 -
charset utf-8;:放在同一 location 块里,解决中文文件名乱码(别放 http 全局块)
避开常见拦截点
很多 403 不是配置错了,而是被其他规则挡住了:
- 检查有没有
index index.html;—— 如果目录下没有index.html,Nginx 会直接拒访,而不是走 autoindex;要么删掉这行,要么在目录里放一个空index.html - 确认 Nginx 工作用户(如
www-data或nginx)对整个路径有r-x权限:从/到目标目录每一级都要能进入(chmod 755) - SELinux 启用时,运行
ls -Z /data/shared,上下文应为httpd_sys_content_t;不对就用chcon -t httpd_sys_content_t /data/shared
验证与生效
改完别急着 reload:
- 先执行
nginx -t确认语法无误 - 再执行
nginx -s reload - 用浏览器访问
http://your-domain.com/files/(注意结尾斜杠),看到带链接的文件列表即成功











