Nginx中alias映射不报404的关键在于严格匹配location与alias的结尾斜杠、遵循“替换而非追加”的路径计算逻辑、确保真实文件路径可被Nginx进程读取;错误常源于斜杠缺失导致路径粘连、混用root/try_files $uri忽略alias上下文、大小写或SELinux权限不一致。
配对 alias 路径映射不报 404,关键不是路径写对了就行,而是得让 Nginx 真正“算对”文件在哪。核心就三点:location 和 alias 的斜杠必须严格匹配、拼接逻辑要符合替换规则、真实文件路径得能被读到。
这是最常踩的坑。alias 不是追加,是替换 —— 它会把 location 匹配到的部分整个去掉,再把剩下的 URI 拼到 alias 路径后面。
/static/css/main.css 对应磁盘路径 /var/www/assets/css/main.css
/var/www/assetss/css/main.css(自动粘连,缺斜杠)/static,而 /static/js/ 被截断或忽略try_files 默认按 root 解析,它不认识 alias 映射后的路径。$uri 还是原始 URL(比如 /static/js/app.js),Nginx 会去 root 目录下找这个完整路径,必然 404。
location /assets/ { alias /opt/app/dist/assets/; try_files $request_filename =404; }
location / { root /opt/app/dist; try_files $uri $uri/ /index.html; }
别光看配置,得让 Nginx “说真话”。快速确认实际读取路径,比反复 reload 更高效。
ls -l /var/www/assets/css/main.css,确保 nginx worker 用户(如 www-data)有读权限ls -Z /var/www/assets/,若上下文不对,执行 chcon -Rt httpd_sys_content_t /var/www/assets
nginx -T 输出最终生效配置,确认你改的是正在运行的那个 server 块Linux 文件系统区分大小写,URL 编码也得规范。Nginx 自动解码请求 URI,但前提是客户端发来的就是标准编码。
/静态/图片.png → 实际发 /%E9%9D%99%E6%80%81/%E5%9B%BE%E7%89%87.png