nginx 默认不自动查找 index.html,必须在 location 块中显式配置 index index.html;,且 root 路径需准确指向含该文件的目录,同时 server 块须正确监听端口并匹配请求才能生效。

nginx.conf 里 location 块没配 index 指令
很多新手直接把 index.html 放进网站根目录,却访问时返回 403 或 404,根本原因是 Nginx 默认不自动找 index.html——它只在显式配置了 index 指令时才启用索引文件逻辑。
必须在 location /(或对应路径的 location)里加上这行:
index index.html;
否则即使文件存在,Nginx 也不会“默认打开它”,而是按目录列表规则处理(若未禁用 autoindex)或直接拒访。
root 路径写错导致 index.html 找不到
index 指令生效的前提是:Nginx 能根据 root(或 alias)拼出完整物理路径。常见错误是 root 指向了上层目录,或者多了一级路径名。
- 如果站点文件放在
/var/www/myapp/,且index.html在该目录下,root必须设为/var/www/myapp,不是/var/www或/var/www/myapp/(末尾斜杠不影响,但语义要对) - 若用了
alias,注意它会**完全替换**匹配路径,index文件必须落在 alias 指向的目录内,且不参与路径拼接 - 用
curl -I http://localhost配合error_log /var/log/nginx/error.log notice;查看实际尝试读取的文件路径,比猜更可靠
index 指令顺序影响 fallback 行为
index 不只支持单个文件,可写多个,Nginx 会按顺序查找第一个存在的:
index index.html index.htm default.html;
这个顺序很关键:
- 如果
index.htm存在但内容错误,Nginx 就不会继续找index.html - 开发时建议只留
index.html,上线后按需加备选,避免意外命中旧文件 - 注意:该指令对所有 HTTP 方法都生效(不只是 GET),但仅用于无 URI 后缀的请求,比如
GET /;而GET /index.html是直出,不走 index 逻辑
server 块里漏了 listen 或 server_name 导致配置未生效
就算 index 和 root 都写对了,如果整个 server 块没被实际加载,还是 404。典型情况:
- 忘记写
listen 80;,或写了listen 8080;却用http://localhost访问(默认走 80) -
server_name设成example.com,但本地 hosts 没映射,或浏览器直输 IP,导致匹配不到该 server 块 - 配置文件没被 include 进主
nginx.conf,或 reload 失败(nginx -t一定要跑一遍)
最简验证方式:临时把 server_name 删掉或设为 "",并确保只有一个 server 块,排除匹配干扰。
真正容易卡住的是 root 路径和 server 匹配的组合问题——文件明明在磁盘上,Nginx 却压根没去那个目录下找 index.html,日志里连“file not found”都不报,因为请求根本没落到你写的 location 里。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











