Nginx部署静态HTML报404,90%因root路径错误或index文件名不匹配;需确认root为绝对路径、目录下真实存在对应大小写的index.html、index指令显式声明且权限正确(目录755、文件644),并重载配置后硬刷新测试。

直接说结论:Nginx部署纯静态HTML后访问报404,90%是root路径没对上,或index文件名不匹配;剩下10%是权限、大小写、符号链接或配置未生效。别急着改try_files,先确认基础路径是否真实存在且可读。
检查root和index是否指向真实存在的文件
这是最常被跳过的一步。Nginx不会自动“猜”你把index.html放哪了,它只按配置硬找。
-
root值必须是**完整绝对路径**,比如/var/www/myapp,不是./dist或dist - 确认该目录下真有
index.html(注意大小写:Linux下Index.html≠index.html) - 检查
index指令是否显式声明,例如index index.html;—— 如果没写,Nginx默认只查index.html,但某些发行版会加index.htm,容易漏匹配 - 用命令验证:
ls -l /var/www/myapp/index.html,确保输出不报“no such file”,且权限为-rw-r--r--(至少644)
try_files $uri $uri/ /index.html不是万能解药,得看场景
这条指令只对SPA(单页应用)有意义,对纯静态HTML站点加了反而可能掩盖真实路径问题。
- 如果你的项目就是几个独立HTML文件(如
about.html、contact.html),根本不需要try_files——删掉它,让Nginx按原路径直出 - 只有用了Vue Router / React Router的
history模式,才需要try_files $uri $uri/ /index.html兜底,否则刷新/about时Nginx会去找/about这个文件(不存在) - 如果加了这行还404,说明
/index.html本身也找不到——这时要回退去查root和文件是否存在,而不是调换顺序或加$uri.html
权限与用户身份容易被忽略
Nginx worker进程(通常是www-data或nginx用户)必须对整个路径有**执行(x)权限**,才能进入目录;对文件有**读(r)权限**,才能返回内容。
- 常见错误:
chmod 644 /var/www/myapp—— 这会让目录失去执行权限,Nginx进不去,直接404 - 正确做法:
chmod 755 /var/www/myapp(目录),chmod 644 /var/www/myapp/index.html(文件) - 检查归属:
ls -ld /var/www/myapp,确保用户组不是root:root而Nginx运行用户无法访问 - 宝塔面板用户注意:它有时会把站点根目录设在
/www/wwwroot/xxx,但Nginx配置里写的root却是/www/wwwroot/xxx/dist,多了一级路径,务必核对
配置修改后必须重载,且清浏览器缓存再测
很多人改完nginx.conf就点刷新,结果看到的还是旧错误——因为Nginx没加载新配置,或者浏览器缓存了404响应。
- 不要用
nginx -s reload赌运气,先用nginx -t检查语法是否通过,再执行重载 - 重启比重载更可靠:
systemctl restart nginx(Linux)或nginx -s stop && start nginx(Windows) - 浏览器测试前,强制清空缓存:
Ctrl+Shift+R(硬刷新)或Ctrl+Shift+Del选中“缓存的图像和文件”清除 - 用
curl -I http://localhost看HTTP头,确认状态码是200而非304或404,排除服务端之外的干扰
最麻烦的其实是路径拼接错误:比如root /data/app; + location /static/ { alias /data/app/assets/; },稍不注意就会少个斜杠或多一层嵌套。建议所有路径都用ls手动敲出来验证,别靠记忆或复制粘贴。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











