nginx的index指令按从左到右顺序匹配文件,遇首个存在且可读的即返回;文件存在但权限不足(如600)会被跳过;location中配置优先于server级;index与autoindex互斥,仅当所有index文件均缺失且autoindex on时才列目录。

当Nginx的index指令配置多个文件名时,它会按**从左到右的顺序依次尝试匹配**,遇到第一个存在的文件就立即返回,不再检查后续项。这个行为看似简单,但在实际部署中容易因文件权限、路径拼接或隐式重定向而引发意料之外的结果。
index指令的匹配逻辑是严格顺序的
Nginx不会“综合判断”哪个文件更合适,只做线性查找:
- 配置为
index index.html index.php default.htm; - 请求
/时,Nginx先检查root /var/www/html;下是否存在index.html - 若存在且可读,直接返回该文件;否则继续查
index.php,再是default.htm - 全部不存在则返回403(目录列表禁用时)或404(开启
autoindex off默认行为)
常见陷阱:文件存在但不可读,会导致跳过
匹配不仅看文件是否存在,还校验Nginx worker进程是否有读取权限:
-
index.html文件存在,但属主为root且权限为600→ Nginx无法读取 → 跳过,继续找index.php - 可通过
ls -l /var/www/html/index.html和ps -u nginx -o pid,comm确认运行用户与权限是否匹配 - 建议统一设为
644,属组包含nginx或www-data
location块中index指令会覆盖全局或server级配置
优先级遵循Nginx配置继承规则:越靠近请求匹配位置的index越生效:
- 在
server块中写index a.html b.html; - 又在
location /api/中写index index.php;→ 所有/api/下的目录索引只认index.php - 若
location /static/未定义index,则回退使用server级配置
注意autoindex与index的协作关系
二者互斥:只要index成功匹配到文件,就不会触发autoindex on的目录列表功能:
- 即使配置了
autoindex on;,只要index index.html;存在,访问/仍返回index.html内容 - 只有所有
index文件都缺失且autoindex on启用时,才显示目录结构 - 若想对某些路径禁用索引页、强制列目录,可单独配
index ""; autoindex on;
不复杂但容易忽略细节。关键就是记住:顺序即优先级,存在 ≠ 可用,就近配置胜于全局设定。










