Nginx 中 index 指令与 autoindex 模块功能互斥但可协同实现“默认文件优先+目录列表兜底”:index 查找并返回预设文件(如 index.html),失败后 autoindex 才生成目录列表,需同 location 块中配置且确保目录有执行权限。

Nginx 中 index 指令和 autoindex 模块功能不同,不能“配合使用”来实现目录下的默认文件优先展示 + 自动索引兜底——它们是互斥的两种行为。
index 指令的作用
index 用于指定当请求一个目录(如 / 或 /static/)时,Nginx 主动查找并返回其中某个预设的文件(如 index.html),前提是该文件存在且可读。它不生成列表,也不显示目录内容。
例如:
location /files/ {
root /var/www;
index index.html;
}
访问 /files/ 时,Nginx 会尝试返回 /var/www/files/index.html;如果该文件不存在,就返回 403 或 404(取决于配置和权限),不会自动启用目录浏览。
autoindex 模块的行为
autoindex on; 是完全独立的功能:当请求一个目录,且该目录下没有匹配 index 指令指定的任何文件时,Nginx 才会生成一个 HTML 格式的目录列表(前提是未禁用且有读取权限)。
它不关心 index 指令是否存在,只看目标路径是否为目录、是否有可读内容、以及 autoindex 是否开启。
例如:
location /downloads/ {
alias /srv/downloads/;
autoindex on;
autoindex_format html;
}
此时即使目录中有 index.html,只要没配 index 指令,Nginx 就不会尝试加载它,而是直接列出所有文件。
想实现“有 index.html 就显示它,没有就列目录”?可以但需注意逻辑
这是常见需求,Nginx 默认行为已支持该逻辑,只需同时配置两者即可,但要注意顺序和条件:
-
index必须显式声明(如index index.html;),否则 Nginx 不会主动查找默认文件 -
autoindex on;要放在同一 location 块中,它只在index查找失败(文件不存在或不可读)后才生效 - 确保目录有执行权限(Linux 下目录需有
x权限才能进入和读取内容),否则autoindex也会失败
正确示例:
location /public/ {
root /var/www;
index index.html;
autoindex on;
autoindex_exact_size off;
autoindex_localtime on;
}
效果:
– 若 /var/www/public/index.html 存在且可读 → 返回该页面
– 否则 → 自动生成目录列表
常见误区与限制
-
autoindex不支持自定义模板,仅提供基础 HTML 列表(可配格式、时间、大小等,但无法加样式或脚本) -
index只检查文件是否存在,不校验 MIME 类型或内容;返回非 HTML 文件(如index.php)也不会自动执行,除非配了 FastCGI - 若
index指定多个文件(如index index.html index.htm;),Nginx 按顺序查找第一个存在的 -
autoindex对安全敏感,生产环境建议关闭,或通过auth_basic限制访问










