alias核心是完全替换location匹配前缀,非转发;必须确保location与alias均以/结尾,否则路径粘连导致404;不可与root混用,且需配合try_files校验文件存在性。

问题本质不是“转发丢失前缀”,而是 alias 本身就不处理“转发”,它只做静态文件路径映射——且核心行为是**完全替换 location 匹配的前缀**。所谓“丢失”,其实是配置没对上 alias 的替换逻辑,导致拼出的磁盘路径错误,返回 404。
确认 location 写法是否带结尾斜杠
alias 要求 location 必须以 / 结尾(字面匹配),否则 Nginx 无法准确剥离前缀:
- ✅ 正确:
location /static/ { alias /var/www/assets/; }→ 请求/static/js/app.js映射为/var/www/assets/js/app.js - ❌ 错误:
location /static { alias /var/www/assets/; }→ Nginx 可能只去掉/stati或行为不可控,极易 404
检查 alias 路径末尾是否加了斜杠
alias 值末尾缺斜杠会导致路径粘连,这是最隐蔽也最常见的坑:
Linux 性能分析与调优专家,覆盖 CPU、内存、磁盘 I/O、网络、内核参数、编译优化、容器/K8s。适用场景:系统卡顿/高负载、内存不足/OOM/Swap 高、CPU 异常/iowait 高。
- ❌ 错误:
alias /var/www/assets;+ 请求/static/css/main.css→ 实际查找路径是/var/www/assetscss/main.css(assets 和 css 直接连在一起) - ✅ 正确:
alias /var/www/assets/;→ 拼出/var/www/assets/css/main.css
避免和 root 混用或误替代
root 是“在根目录后追加完整 URI”,alias 是“用指定路径替换掉匹配的前缀”。二者语义完全不同,不能靠改一个指令来“修复”另一个的误用:
- 如果本意是把
/api/v1/docs/映射到/opt/swagger-ui/并保留子路径(如/api/v1/docs/index.html→/opt/swagger-ui/index.html),就该用 alias,且必须写成:location /api/v1/docs/ { alias /opt/swagger-ui/; } - 如果错写成
root /opt/swagger-ui;,请求会去找/opt/swagger-ui/api/v1/docs/index.html,显然不存在
配合 try_files 提高容错性
alias 不校验文件是否存在,建议加 try_files $request_filename =404;,用 Nginx 已解析出的绝对路径做存在性判断:
location /assets/ { alias /opt/app/dist/assets/; try_files $request_filename =404; }- $request_filename 是 Nginx 根据 alias 规则拼好的真实磁盘路径,比 $uri 更可靠

















