最常用、最稳妥的静态资源特殊标记方式是在location块中用add_header添加自定义响应头;支持变量、结合map实现条件化标记,可与expires协同强化缓存语义,禁止用rewrite或if做标记逻辑。

直接在 location 块中用 add_header 添加自定义响应头,是最常用、最稳妥的静态资源特殊标记方式。它不改变请求流程,只附加元信息,适合做缓存控制、安全标识、来源标记等。
用 add_header 注入标准化标记
对 CSS、JS、图片等静态资源统一打上业务或环境标签,例如标记“内部发布版”或“CDN回源标识”:
- 在匹配静态后缀的 location 中添加
add_header X-Resource-Tag "prod-v2.4"; - 支持变量,如
add_header X-Deploy-Time "$time_iso8601";可记录精确发布时间 - 若需对特定路径(如
/assets/)打标,用前缀 location 更直观:location /assets/ { add_header X-Env "staging"; }
结合 map 指令实现条件化标记
当标记需依据请求特征动态生成(如按 User-Agent 区分移动端/桌面端资源),用 map 预定义变量再注入:
- 在 http 块顶层定义:
map $http_user_agent $client_type { ~*mobile "mobile"; default "desktop"; } - 在静态 location 中使用:
add_header X-Client-Type $client_type; - 注意:map 必须在 server 外定义,且变量名不能含短横线(如
$x_tag合法,$X-Tag不合法)
用 expires + add_header 组合强化缓存语义
静态资源常需明确缓存策略,“标记”可与缓存指令协同增强可读性与可调试性:
-
expires 1y;配合add_header Cache-Control "public, immutable, stale-while-revalidate=86400"; - 添加
add_header X-Cache-Status "static-long";便于前端或监控系统快速识别资源类型 - 避免重复设置同名 header;Nginx 默认会覆盖前一个同名 add_header,如需追加可用
add_header X-Trace "$request_id" always;(加always确保 4xx/5xx 响应也携带)
避免用 rewrite 或 if 做标记逻辑
特殊标记本质是响应增强,不是请求改写。不要用以下方式:
- 不用
rewrite重写 URL 来“模拟标记”,这会干扰真实路径和缓存一致性 - 不用
if ($request_uri ~* \.js$) { add_header ... }—— if 在 location 内虽可用,但易出错且无必要 - 禁止在 server 或 http 块顶层用 if 判断请求方法或 URI 做标记,Nginx 官方明确不推荐


















