news 2026/9/14 1:16:42

前端生产环境图片404?别急,先查Nginx的try_files指令

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
前端生产环境图片404?别急,先查Nginx的try_files指令

上周刚上线的钢材加工生产管理系统,运营同事急吼吼找来:坯料库的模型图全裂了,只剩个破碎图标,工人没法核对坯料型号。这已经是本月第三次静态资源出问题——前两次分别是 GIF 动图和系统图标 404,这次直接卡住了核心业务流程。

我先没动代码,开了浏览器控制台看网络请求。所有 /assets/ 开头的请求状态码都是 200,但响应体是一整页 index.html,Content-Type 也变成了 text/html,浏览器没法把它当图片解。一开始我怀疑前端打包配置,翻了 webpack 的 publicPath、Vite 的 base,本地环境跑得好好,只有生产服务器出毛病,锅肯定在反向代理那层。翻出 Nginx 配置后根因清楚了:原来只有一行兜底规则try_files $uri $uri/ /index.html;,意思是请求的资源不存在就重定向到 index.html。可前端打包后所有静态资源都进了 /assets/ 目录,Nginx 根本没单独处理这个路径,于是所有 /assets/ 请求都被当成「不存在的路径」,直接吐回 index.html,图片自然加载失败。

修复思路很清楚:在 server 块里给 /assets/ 单独开一条匹配规则,优先拦下静态资源请求,别让兜底规则碰它。生效配置是这样:

location /assets/ { alias /usr/share/nginx/html/assets/; expires 30d; add_header Cache-Control "public, immutable"; }

这里我踩了个很典型的坑:第一版顺手写的是root /usr/share/nginx/html/assets/;,Nginx 拼完路径变成 /usr/share/nginx/html/assets/assets/xxx,又 404 了,排查了 10 分钟才反应过来——alias 是直接替换掉匹配到的路径前缀,root 是在原路径后面拼子路径,静态资源映射得用对指令。

配置确认无误,按流程npm run build:prod重新打包前端、打新 Docker 镜像,正要部署,SSH 连服务器超时了,运维说是机房网络波动,短时间恢复不了。我没干等,先把操作步骤和回滚方案整理成标准文档:停旧容器、加载新镜像、启动后跑nginx -t检查配置语法、没问题再重载 Nginx。同时把改好的 Nginx 配置、Dockerfile、部署脚本都备份进代码仓库。网络一恢复照着文档走,10 分钟部署完,图片恢复正常。

回头看,这事给了几条提醒:碰到静态资源 404,先开控制台看响应内容,如果返回的是 HTML 而不是资源本身,十有八九是 Nginx/Caddy 这类代理的配置问题,别上来就改前端;前端打包后带 hash 的静态资源一定要单独写 location 块,别光靠 try_files 兜底,否则会被当动态路由甩去 index.html,顺手加长期缓存还能提速;生产改配置前先把回滚方案备好,真遇上网络中断、权限不足也不至于拉长故障时间。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/14 1:13:12

铝型材表面瑕疵识别:从数据标注到模型部署的工程实践

简介:基于深度学习的铝型材表面瑕疵识别项目,面向制造业质检人员、人工智能开发者和高校学生,聚焦利用机器学习与深度学习算法对铝型材表面缺陷进行自动检测与分类。压缩包共6个文件,整体仅234KB,包含5个Python脚本和1…

作者头像 李华
网站建设 2026/9/14 0:55:52

WorkBuddy连接实战:四层模型、Skill配置与业务系统集成指南

《WorkBuddy 实战蓝皮书》系列写到第三篇,前两篇聊了基础认知和本地环境搭建,后台收到不少私信,问得最多的问题集中在——装好之后怎么让它真正“通”起来?这个“通”不只是网络通畅,更是 WorkBuddy 跟你的电脑、你的资…

作者头像 李华
网站建设 2026/9/14 0:43:38

java项目-第148期ssm社区疫情防控管理信息系统

java项目-第148期ssm社区疫情防控管理信息系统-ssm毕业设计 今天分享的项目是《ssm社区疫情防控管理信息系统》 该项目分为2个角色,管理员、用户。 用户可以浏览前台的疫情物资,进行申请领取。申请后可以在后台查看自己的申领物品。 管理员负责登录后台系…

作者头像 李华
网站建设 2026/9/14 0:32:49

基于 Spring Cloud 的分布式在线考试管理系统:设计实现、技术栈与核心代码

1. 项目背景与意义随着教育信息化的深入推进,传统线下考试在组织效率、阅卷成本、防作弊手段和数据分析能力等方面逐渐暴露出瓶颈。在线考试系统能够实现组卷、考试、阅卷、成绩统计的全流程数字化,显著提升考试组织效率。然而,当考生规模扩大…

作者头像 李华
网站建设 2026/9/14 0:23:03

Python性能优化

1. 使用内建函数: 你能够运用写出具备高效特性的代码, 然而却不容易战胜那内置有的函数, 经细致查证之后, 它们是极为迅速的。 2.使用join()连接字符串. 你能够运用“”去连接字符串, 然而鉴于在其中是不可变的情形, 每一回“”操作都会生成一个全新的字符串, 并且复制旧有的…

作者头像 李华
网站建设 2026/9/14 0:19:55

MCP Client 高性能连接池管理:在多 Agent 并发中的复用实践

MCP Client 高性能连接池管理:在多 Agent 并发中的复用实践在企业级多智能体系统(MAS)中,当数十个并发的 Agent 实例需要频繁调用远程 MCP(Model Context Protocol) Server 上的工具与资源时,很…

作者头像 李华