Nginx中为图片设长期强缓存需用~*正则精准匹配后缀,配expires 1y、add_header Cache-Control "public, immutable"及etag off/if_modified_since off,避免被location /等覆盖。

在 Nginx 的 location 块中用 expires 指令为静态图片设置长期强缓存,核心是匹配图片后缀、关闭 ETag(可选但推荐)、配合 add_header 设置 Cache-Control,并确保不被 upstream 或其他配置覆盖。
匹配常见图片后缀的 location 块
建议用正则 location 精确匹配图片请求,避免影响其他资源:
- 使用
~* \.(jpg|jpeg|png|gif|webp|ico|svg)$不区分大小写匹配 - 放在 server 块内,且优先级高于通用 location(如
/) - 避免写成
location /images/这类前缀匹配——它无法覆盖根路径下的图片
设置 expires 和 Cache-Control 头
expires 指令会自动设置 Expires 和 Cache-Control: max-age=...,但长期缓存建议显式补充 immutable(提升复用率):
-
expires 1y;表示缓存 1 年(约 31536000 秒) - 加
add_header Cache-Control "public, immutable, max-age=31536000";覆盖默认行为,明确声明不可变性 -
immutable对现代浏览器有效,能跳过条件请求(如 If-None-Match),提升加载速度
关闭 ETag 和 Last-Modified(可选但推荐)
强缓存下这些验证头无意义,还可能干扰 CDN 或代理行为:
-
etag off;禁用 ETag 生成 -
if_modified_since off;关闭 Last-Modified 头 - 这对静态资源更干净,尤其搭配版本化 URL(如
logo.a1b2c3.png)时效果更佳
完整配置示例
放在 server 块中即可:
location ~* \.(jpg|jpeg|png|gif|webp|ico|svg)$ {
expires 1y;
add_header Cache-Control "public, immutable, max-age=31536000";
etag off;
if_modified_since off;
}注意:确保该 location 不被更外层的 location / 或 rewrite 规则覆盖;若用了 proxy_pass,需确认后端未覆写缓存头。


















