Nginx 的 index 指令只接受相对文件名(如 index.html),不支持绝对路径;它需配合 root 或 alias 使用,由后者确定根目录,index 仅负责拼接文件名查找。

Nginx 的 index 指令不接受绝对路径,它只接受相对文件名(如 index.html、home.htm),后面跟绝对路径(比如 index /var/www/index.html;)会导致配置校验失败,Nginx 启动或重载时直接报错:
nginx: [emerg] invalid value "/var/www/index.html" in "index" directive
这个错误在运行 nginx -t 时就能立刻暴露,Nginx 不会加载该配置。
为什么 index 后不能写绝对路径?
index 指令的作用是:当用户请求一个目录(如 / 或 /admin/)时,Nginx 在该目录下按顺序查找指定的文件名。它必须配合 root 或 alias 指令使用,由后者决定“根目录在哪”,index 只负责拼上文件名去查——
✅ 正确逻辑:root /data/web; + index index.html; → 查 /data/web/index.html
❌ 错误逻辑:index /data/web/index.html; → Nginx 不识别这种写法,语法非法
常见误写场景和对应修复
-
误写成:
location / { index /usr/share/nginx/html/index.html; }✅ 应改为:
location / { root /usr/share/nginx/html; index index.html; } -
误把
root和index分开写、路径没对齐:root /opt/app; location /static/ { index /opt/app/static/index.html; # ❌ 语法错 + 逻辑错 }✅ 正确写法(注意
root位置和路径拼接):location /static/ { root /opt/app; # 实际查找 /opt/app/static/index.html index index.html; } Windows 下路径斜杠写错(看似像绝对路径):
❌root C: ginxhtml;→ Nginx 解析失败(需正斜杠或双反斜杠)
✅root C:/nginx/html;或root C:\nginx\html;
补充提醒:别混淆 index 和 try_files
-
index只在请求目录结尾有/(如/about/)或无后缀的根路径(如/)时触发; - 若请求的是
/about(没尾斜杠),Nginx 默认当文件处理,此时index不生效,得靠try_files $uri $uri/ =404;来兜底; - 所以生产环境推荐组合写法:
location / { root /var/www/site; index index.html; try_files $uri $uri/ /index.html; }
这样既支持 / 自动找 index.html,也支持刷新 /user/profile 这类 SPA 路由不 404。
不复杂但容易忽略:index 是纯文件名列表,不是路径,所有路径逻辑都交给 root 或 alias 控制。


















