nginx 404主因是配置错位、路径拼接误解或权限/selinux限制;须用nginx -t查生效root,手动拼路径并ls验证存在性与大小写,检查worker用户权限及selinux上下文,spa需配try_files兜底。

404 不是文件没传上去,而是 Nginx 没去你认为的地方找 —— 根目录配置错位、路径拼接逻辑误解、权限或 SELinux 限制,这三类问题占了绝大多数。
确认实际生效的 root 路径
Nginx 的 root 不一定是你在配置里“看到”的那个。server 块写的 root 可能被 location 块里的 root 覆盖;多个 conf 文件加载顺序也可能导致覆盖。
- 执行 nginx -T | grep "root",直接看最终合并后生效的配置,重点找你请求 URI 对应的 location 块(比如访问 /css/app.css,就搜 location /css/)
- 注意 location 带前缀时的行为:location /api/ { root /var/www; } → 实际查找的是 /var/www/api/xxx,不是 /var/www/xxx
- 如果只是想把 /api/ 映射到 /var/www/,改用 alias /var/www/;(末尾必须加斜杠)
手动验证物理路径是否存在
把浏览器 URL 和 location 中的 root 拼起来,得到完整路径,再用系统命令验证。
Zynq‑7000 / Zynq UltraScale+ 硬件调试技能。适用于 Xilinx Zynq(Cortex‑A9/A53 + FPGA)Linux 环境,调试 I2C、I2S、UART、GPIO 等外设。包括设备树配置、内核驱动、用户空间调试工具、交叉编译和常见问题排查,支持 PetaLinux 开发。
- 例如:请求 /images/logo.png,对应 location 配置为 location /images/ { root /mnt/data; } → 拼出路径:/mnt/data/images/logo.png
- 运行 ls -l /mnt/data/images/logo.png,检查文件是否存在、大小写是否一致(Linux 区分大小写)
- 前端打包生成带哈希的文件(如 app.a1b2c3.js),但 HTML 仍引用旧名,也会 404 —— 查看页面源码和实际文件名是否匹配
检查权限与 SELinux 上下文
路径对、文件在,还 404?很可能是“看得见,读不了”。
- 查 Nginx worker 进程用户:ps aux | grep nginx(通常是 www-data 或 nginx)
- 模拟该用户访问:sudo -u www-data ls -l /mnt/data/images/logo.png,若提示 permission denied,说明权限不足
- 给目录加执行权限(x)、文件加读权限(r):chmod 755 /mnt/data/images、chmod 644 /mnt/data/images/logo.png
- 若为 CentOS/RHEL 系统,检查 SELinux:ls -Z /mnt/data,确保上下文是 httpd_sys_content_t;否则执行 chcon -R -t httpd_sys_content_t /mnt/data
补充:别漏掉 try_files 和 index
静态资源没问题,但访问根路径(如 /)返回 404,常因缺少兜底或索引规则。
- location / { try_files $uri $uri/ /index.html; } —— SPA 应用必备,避免前端路由刷新 404
- 确保 index 指令存在且顺序合理:index index.php index.html;,否则可能跳过 index.php 直接返回 404
- ThinkPHP 等框架要求 root 必须指向 public 目录,若指向项目根目录,$document_root/index.php 就会拼成错误路径,报 “No input file specified”










