404错误表示服务器成功接收请求但无法定位资源;需通过network面板检查request url是否为根路径绝对路径(如/js/app.js)、全量域名(如https://api.example.com/)或本地file协议,再结合nginx location配置、publicpath设置及html中src/href硬编码情况综合排查。

直接看浏览器 Network 面板里 404 请求的 Request URL,如果以 / 开头(如 /static/js/app.js)或带完整域名(如 https://backend.com/css/style.css),基本就是绝对路径没被正确代理或解析导致的。
怎么看 Request URL 是不是绝对路径惹的祸
打开开发者工具 → Network → 刷新页面 → 筛选 404 请求:
- 若 URL 是
/js/app.js或/assets/logo.png:说明是**根路径绝对路径**,Nginx 没配对应location规则去代理它 - 若 URL 是
https://api.example.com/static/main.css:说明后端返回了**硬编码的全量域名**,浏览器直接向该地址发请求,但 Nginx 根本没接管这个域名或路径 - 若 URL 是
file:///C:/project/index.html:这是本地双击打开 HTML 的典型表现,压根没走 Web 服务器,所有相对路径都按文件系统解析,必然出错
为什么 /xxx 这种路径在反代下会 404
Nginx 默认只靠 location / 不会自动把 /js/app.js 转发给后端——它可能尝试去磁盘找 $document_root/js/app.js,而你根本没放文件在那里。
-
location /只匹配“未被其他更精确规则捕获”的请求,.js、.css等后缀容易被默认 MIME 类型处理逻辑拦截 - 必须显式加
location ^~ /js/或location ~* \.(js|css)$,并确保proxy_pass末尾带/,否则路径拼接错误(比如变成/js/js/app.js) - 如果前端构建时设了
publicPath: '/myapp/',但 Nginx 没把/myapp/js/映射过去,也会 404
怎么快速验证是不是 HTML 里写死了绝对路径
右键页面 → “查看页面源代码”,搜索 src=、href=、url(,重点关注值是否以 / 或 http 开头:
- 找到
<script src="/static/bundle.js"></script>→ 这是根绝对路径,依赖 Nginx 代理/static/ - 找到
<link href="https://cdn.example.com/style.css">→ 外部 CDN,和你的反代无关,但要确认 CDN 是否可访问 - 找到
<base href="/admin/">→ 它会让所有相对路径都基于此拼接,如果和实际部署路径不一致,./js/app.js就会变成请求/admin/js/app.js,而你可能只代理了/js/
容易被忽略的关键点
很多人改完 Nginx 配置就以为完了,但漏掉了两个隐形开关:
-
sub_filter默认不启用 HTML 替换,必须加sub_filter_once off;和sub_filter_types text/html;才生效 - 前端路由用 History 模式时,
try_files $uri $uri/ /index.html;必须放在静态资源 location 之后,否则 JS/CSS 请求会被 fallback 到index.html,返回 HTML 内容却声明Content-Type: application/javascript,浏览器直接报 MIME 类型错误
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











