You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Nginx反向代理为指定静态文件添加缓存后返回404如何解决?

问题根因

你启用的js/css匹配location块未配置proxy_pass规则,Nginx正则匹配优先级高于普通前缀匹配,当请求命中\.(?:css|js)$规则后,会直接在服务器本地磁盘查找对应文件,而你实际的静态资源托管在端口为3000的上游服务中,本地无对应文件就会返回404。

修复方案

直接在被注释的location块中补全上游转发规则即可,无需嵌套到location /块内部:

# 静态资源缓存配置
location ~* \.(?:css|js)$ {
    expires 1d;  
    add_header Vary Accept-Encoding;
    add_header Cache-Control private;
    # 补全转发到上游3000服务的配置
    proxy_pass http://localhost:3000;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Host $server_name;
}

修改配置后执行nginx -t检查语法无误,再执行nginx -s reload即可生效。

可选优化

如果后续你把打包后的单页应用静态资源直接存到Nginx本地目录(比如/usr/share/nginx/spa/),可以替换proxy_pass为root规则,响应性能更高:

location ~* \.(?:css|js)$ {
    root /usr/share/nginx/spa/;
    expires 1d;  
    add_header Vary Accept-Encoding;
    add_header Cache-Control private;
}

内容的提问来源于stack exchange,提问作者makabeka

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 17:09:04