Nginx中alias配置404主因是路径替换逻辑误解:alias完全替换location匹配前缀,不拼接;需确保location以/结尾、alias值为真实绝对路径且末尾加/(单文件除外),并注意权限、大小写及避免与try_files混用不当。

文件找不到(404)在 Nginx alias 配置中非常常见,根本原因不是文件没放对位置,而是 alias 的路径替换逻辑被误用——它不拼接、只截断再重定向。只要理清“location 前缀怎么被去掉”“alias 后路径怎么拼”,90% 的问题都能立刻定位。
检查 location 是否以 / 结尾
alias 要求匹配的 location 必须以斜杠结尾,否则截断行为不可控。例如:
- ❌ 错误写法:
location /static(无尾部 /)→ 请求/static/js/app.js时,Nginx 可能只截掉/static字符串,剩下js/app.js,拼到 alias 后变成/app/assets/js/app.js—— 但你实际想映射的是整个/static/下所有内容。 - ✅ 正确写法:
location /static/ { alias /app/assets/; }→ 完整截掉/static/,剩余js/app.js拼到/app/assets/后得到/app/assets/js/app.js。
确认 alias 值是容器内存在的绝对路径
alias 后面的值必须是容器内部真实存在的、以 / 开头的绝对路径,且末尾建议加 /(除非指向单个文件):
- 若前端构建产物放在
/usr/share/nginx/html/dist/,而配置写成location /dist/ { alias /usr/share/nginx/html/; },Nginx 会去找/usr/share/nginx/html/js/main.js,但文件实际在/usr/share/nginx/html/dist/js/main.js。 - ✅ 应改为:
location /dist/ { alias /usr/share/nginx/html/dist/; }(注意末尾斜杠)。 - Docker 中还要验证挂载路径是否正确:比如
docker run -v ./build:/app/dist,配置里就得对应alias /app/dist/,不能写成/app/build/或漏掉/。
排查权限与大小写敏感性
即使路径完全正确,也可能因权限或大小写导致 404 或 403:
- Linux 下目录需有执行(
x)权限才能进入,Nginx worker 进程用户(如www-data或nobody)必须对 alias 目录及其父路径有读(r)和执行(x)权限。 - 宿主机挂载时注意大小写:Mac 或 Windows 默认不区分大小写,但 Linux 容器严格区分。比如宿主机目录是
./Frontend/Build,但配置写了alias /app/frontend/build/,就会找不到。 - 可进容器执行
ls -l /app/assets/和id -u nginx(或查看 worker 用户),确认权限和归属是否匹配。
验证是否混用 alias 与 try_files 不当
try_files 默认基于 root 解析路径,不继承 alias 映射结果。直接写 try_files $uri =404 很可能失败:
- ✅ 正确做法是使用
$request_filename,它是 Nginx 内部已按 alias 规则解析出的完整文件路径:try_files $request_filename =404; - 避免在同一个 location 块中既设 alias 又设 root;如需 fallback(如 SPA 的 history 模式),建议拆开配置:
location /assets/ { alias /opt/app/dist/assets/; try_files $request_filename =404; }
location / { root /opt/app/dist; try_files $uri $uri/ /index.html; }


















