Nginx的index指令按书写顺序从左到右匹配首个存在且可读的默认首页文件;多个文件名空格分隔、结尾加分号,不可加引号或绝对路径;支持http/server/location三级配置,就近生效;需确保文件权限为644且属主属组正确;常与try_files配合实现PHP路由兜底。
Nginx 通过 index 指令设置多个默认首页时,优先级完全由指令中文件名的书写顺序决定:从左到右依次检查,找到第一个存在且 Nginx 有读取权限的文件就立即返回,后续文件不再尝试。
语法很简单,多个文件名用空格分隔,结尾必须加分号:
index index.php index.html index.htm; → 先找 index.php,存在就返回;否则查 index.html,再是 index.htm
index index.html;
/var/www/index.php),也不能写成 index "index.php"; 或 index index.php ;(末尾空格+分号会报错)指令可放在 http、server 或 location 块中,优先级按“就近原则”生效:
location /admin/ { } 里 → 只对 /admin/ 路径有效,比如 index admin.php;
server 块里 → 影响整个站点,但会被子 location 覆盖http 块里 → 全局默认,优先级最低,容易被覆盖匹配过程不仅检查文件是否存在,还会验证 Nginx worker 进程是否有读取权限:
index.php 文件存在,但权限为 600 且属主不是 nginx 或 www-data → 被跳过,继续查下一个644,所属组包含运行用户(如 chown -R www-data:www-data /var/www/html)ls -l /path/to/file 和 ps aux | grep nginx 确认用户和权限是否匹配index 只负责目录访问时的静态文件匹配,若想在找不到首页时交给 PHP 路由(如 Laravel、WordPress),需搭配 try_files:
location / { index index.php index.html; try_files $uri $uri/ /index.php?$query_string; }$uri/ 触发 index 查找逻辑,而 /index.php 是兜底转发index 仍需显式声明(如 index index.php;),否则 $uri/ 不会触发内部重定向