alias必须使用绝对路径,因Nginx将其直接拼接为文件系统路径,相对路径会被解析为相对于/etc/nginx目录,导致404;正确写法是全部以/开头,且末尾斜杠须与location严格一致。

alias 指令**不支持相对路径**,必须使用绝对路径。Nginx 启动时不会报语法错误,但运行时会把相对路径当作相对于 Nginx 主配置目录(通常是 /etc/nginx)去查找,结果几乎必然 404。
为什么 alias 不能用相对路径
Nginx 的 alias 是直接参与文件系统路径拼接的底层指令,它不做路径解析或上下文推导。例如:
- 配置
alias ./static/;→ 实际尝试打开/etc/nginx/./static/xxx - 配置
alias ../html/;→ 实际尝试打开/etc/nginx/../html/xxx,即/html/xxx(可能越权且不可读)
这类路径不仅不可控,还容易因工作目录变化、权限限制或符号链接问题彻底失效。
正确写法:全部改为以 / 开头的绝对路径
把所有 alias 值显式写成完整绝对路径,确保指向真实存在的目录:
- ❌ 错误:
alias static/;或alias ./dist/; - ✅ 正确:
alias /var/www/myapp/dist/; - ✅ 正确:
alias /usr/share/nginx/html/assets/;
注意末尾斜杠必须与 location 保持一致(如 location /assets/ { alias /usr/share/nginx/html/assets/; })。
验证路径是否真实存在且可读
光改绝对路径还不够,还需确认:
- 执行
ls -ld /var/www/myapp/dist/,确保目录存在,且 Nginx 进程用户(如www-data或nginx)有x权限(进入目录) - 执行
ls -l /var/www/myapp/dist/js/app.js(选一个典型文件),确认文件存在且有r权限 - 若启用了 SELinux,检查上下文:
ls -Z /var/www/myapp/dist/,必要时修复:chcon -Rt httpd_sys_content_t /var/www/myapp/dist/
快速确认 alias 是否生效
在对应 location 块中临时加一行:
return 200 "file: $request_filename";
然后 curl http://localhost/assets/main.css,看返回的实际路径是否是你预期的绝对路径。如果不是,说明 location 没匹配上,或 alias 被其他规则覆盖了。


















