alias是路径前缀完全替换而非拼接,location与alias末尾斜杠必须严格一致;例如location /admin/static/ { alias /var/www/myapp/dist/; },请求/admin/static/js/app.js映射为/var/www/myapp/dist/js/app.js。

明确 alias 的路径替换逻辑
alias 不是“在某个目录下找文件”,而是把 location 匹配到的 URL 前缀整个替换成你写的路径。比如:
-
location /admin/static/ { alias /var/www/myapp/dist/; } → 请求
/admin/static/js/app.js,Nginx 实际读取/var/www/myapp/dist/js/app.js - 如果写成
alias /var/www/myapp/dist(末尾缺/),就会变成读取/var/www/myapp/distjs/app.js—— 自动粘连,必然 404
确保 location 和 alias 路径结尾一致
这是最常被忽略的细节:location 的匹配路径和 alias 值的结尾斜杠必须同步。两者都带 / 或都不带(单文件除外),否则层级错位。
- 推荐统一用带斜杠形式:
location /assets/ { alias /opt/app/public/; } - 若 location 是
/assets(无尾斜杠),alias 就该写成/opt/app/public,但这样容易和根路径混淆,不建议 - 浏览器请求
/assets/css/style.css,Nginx 才会精准映射到/opt/app/public/css/style.css
配合 try_files 处理子路径下的 SPA 回退
Vue/React 等前端项目部署在子路径(如 /admin/)时,路由跳转或刷新可能触发 404。不能只靠 alias 服务静态资源,还要兜底 HTML 请求。
- 在 alias 块里加
try_files $uri $uri/ /admin/index.html;(注意 fallback 路径含前缀) - 不要写
/index.html,否则浏览器在/admin/user刷新时,Nginx 会去找根目录下的 index.html,而不是/admin/对应的入口 - 同时确认前端构建配置中
publicPath与 Nginx location 前缀一致(如设为/admin/)
验证真实路径并排查权限问题
别猜路径,让 Nginx 告诉你它到底想去哪读文件:
- 临时在 location 块里加一行:
return 200 "real path: $request_filename"; - 用 curl 请求一个静态资源,看返回的真实路径是否符合预期
- 检查该路径上每级目录对 Nginx 工作用户(如 www-data)是否有
x权限(进入目录)、目标文件是否有r权限(读取内容) - Linux 下注意大小写:URL 中的
/Admin/和磁盘上的/admin/是两个不同路径











