参考资料

  1. Nginx版本号命令
  2. Nginx版本无法扫描怎么办
  3. nginx反向代理指定ip
  4. Nginxroot指令根目录配置详细说明以及案例
  5. Nginxgzip开启压缩及相关配置详细说明以及案例
  6. nginx 配置https
  7. Nginx如何用于反向代理?
  8. nginx是什么意思

nginx反向代理缓存静态文件

nginx反向代理缓存静态文件

为什么需要缓存静态文件

在网站架构中,Nginx 常被用作反向代理服务器,将请求转发到后端应用服务(如 Java、PHP、Node.js 等)。静态文件包括图片、CSS、JavaScript、字体、PDF 等不经常变化的内容。如果每个用户请求这些文件时都让后端重新处理并返回,会消耗大量服务器资源,延长响应时间。 通过在 Nginx 层启用缓存,可以将静态文件内容存储在本地磁盘或内存中。当相同文件再次被请求时,Nginx 直接返回缓存内容,不再访问后端服务。这样做的好处是:

  • 降低后端服务器负载
  • 减少网络传输时间,提升页面加载速度
  • 提高网站并发处理能力

配置前的准备

确认您的 Nginx 已编译了 `ngx_http_proxy_module` 和 `ngx_http_cache_purge_module`(后者用于主动清理缓存,非必需)。可以使用 `nginx -V` 命令查看编译参数。本文的配置实例基于 Nginx 1.18 及以上版本,适用于大多数 Linux 发行版。 配置前需要确定以下几点:

  • 静态文件访问路径(如 `/static/` 或文件后缀 `.css`、`.js` 等)
  • 后端服务地址(如 `http://127.0.0.1:8080`)
  • 缓存存储目录及目录层级

基础配置示例

以下是一个完整的 Nginx 反向代理缓存静态文件的配置片段,可放置在 http 块中: nginx http {

定义缓存路径及键信息

proxy_cache_path /var/cache/nginx/static levels=1:2 keys_zone=static_cache:10m max_size=1g inactive=60m use_temp_path=off; server { listen 80; server_name example.com;

根目录或 location 中的静态文件请求

location /static/ { proxy_pass http://backend_upstream; proxy_cache static_cache; proxy_cache_valid 200 60m; proxy_cache_valid 404 1m; proxy_cache_key "$uri"; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr;

跳过带查询参数的请求(可选)

if ($query_string) { return 403; } } } } 各参数说明:

  • `proxy_cache_path`:指定缓存文件存放目录及参数。
  • `levels=1:2`:生成两级目录,避免单个目录文件过多。
  • `keys_zone=static_cache:10m`:定义共享内存区域名称和大小,用于存储缓存键与元数据。
  • `max_size=1g`:缓存最大占用磁盘空间。
  • `inactive=60m`:若一个缓存文件在60分钟内未被访问,则被清除。
  • `use_temp_path=off`:禁止临时文件写入其他路径,减少IO开销。
  • `proxy_cache static_cache;`:启用名为 `static_cache` 的缓存。
  • `proxy_cache_valid 200 60m;`:对HTTP 200响应缓存60分钟;404响应缓存1分钟。
  • `proxy_cache_key "$uri";`:使用URI作为缓存键。如果文件带版本号(如 `app.js?v=123`),可改为 `"$uri$is_args$args"`。

针对不同文件类型缓存

如果静态文件路径不规则,也可以使用 location 匹配文件扩展名: nginx location ~* \.(css|js|png|jpg|jpeg|gif|ico|svg|woff2?|ttf|eot)$ { proxy_pass http://backend_upstream; proxy_cache static_cache; proxy_cache_valid 200 304 30d; # 图片、字体等可缓存更长时间 proxy_cache_key "$uri"; proxy_cache_bypass $cookie_nocache $arg_nocache; # 可手动控制绕过 expires 30d; # 同时向浏览器发送过期时间 add_header X-Cache-Status $upstream_cache_status; # 便于调试 } 这里使用了正则匹配,常见静态文件后缀均可命中。注意 `expires` 指令会告知浏览器缓存该文件,减少后续重复请求。通过添加 `X-Cache-Status` 响应头,您可以查看当前缓存状态:

  • `HIT`:命中缓存
  • `MISS`:未命中,后端返回后加入缓存
  • `BYPASS`:绕过了缓存
  • `EXPIRED`:缓存过期,已重新从后端获取

缓存刷新与清理

当静态文件更新(如重新部署前端代码)时,旧的缓存内容会导致用户看到旧版文件。常规处理方式有两种:

  1. 文件名加版本号:在 HTML 中引用静态资源时加入版本参数或生成哈希文件名,如 `app.8f3d2a.js`。文件名变化后,Nginx 会将其视为新请求,自然生成新缓存。
  2. 主动清理缓存:使用第三方模块 `ngx_cache_purge` 或调用管理接口删除指定缓存目录下的文件。例如,缓存键为 `/static/app.js`,可配置如下 location:

nginx location ~ /purge(/.*) { allow 127.0.0.1; deny all; proxy_cache_purge static_cache "$1"; } 执行 `curl http://127.0.0.1/purge/static/app.js` 即可清理该缓存项。不建议让外部用户访问此接口,需严格限制来源IP。

注意事项

  • 缓存键冲突:如果两个不同 URL 对应同一静态文件内容,可以合并。但如果同 URL 在不同 cookie 或语言下有不同资源,务必在 `proxy_cache_key` 中加入区分因子,否则会导致串内容。
  • 临时关闭缓存:在开发环境或需要实时调试时,可用 `proxy_cache off;` 或在 location 中加入 `proxy_no_cache` 条件。
  • 磁盘空间:需定期检查 `max_size` 设置是否合理,避免缓存占用过多磁盘。
  • 缓存与 SSL:如果网站使用 HTTPS,缓存配置逻辑不变,只是在 server 块中配置 SSL 证书即可。

结语

Nginx 缓存静态文件是提升站点性能的常见且有效手段。通过上述配置,可以显著减少后端压力,加快用户访问速度。建议先在一台测试机上验证缓存命中与过期逻辑,再逐步应用到生产环境。日常运维中,关注缓存命中率和磁盘占用,及时调整策略,才能获得最佳效果。

AIGEO优化摘要

AI可读摘要:nginx反向代理缓存静态文件 为什么需要缓存静态文件 在网站架构中,Nginx 常被用作反向代理服务器,将请求转发到后端应用服务(如 Java、PHP、Node.js 等)。静态文件包括图片、CSS、JavaScript、字体、PDF 等不经常变化的内容。如果每个用户请求这些文件时都让后端重新处理并返回,会消耗大量服务器资源,延长响应时间。 通过在 Ngi...
常见问题:
nginx反向代理缓存静态文件主要讲了什么?

nginx反向代理缓存静态文件 为什么需要缓存静态文件 在网站架构中,Nginx 常被用作反向代理服务器,将请求转发到后端应用服务(如 Java、PHP、Node.js 等)。静态文件包括图片、CSS、JavaScript、字体、PDF 等不经常变化的内容。如果每个用户请求这些文件时都让后端重新处理并返回,会消耗大量服务器资源,延长响应时间。 通过在 Ngi...

nginx反向代理缓存静态文件适合哪些人参考?

适合正在了解文章信息、进行对比筛选,或希望快速获得结论的用户参考。

阅读nginx反向代理缓存静态文件时应重点看哪些内容?

建议重点关注标题、摘要、正文说明、图片资料和更新时间。

AIGEO评分:95/100
作者:王壹杰
时间:2026-09-06 23:45:27
来源:https://bt.ciilii.com/