dynamic_etag
`dynamic_etag` 指令启用为 NGINX 提供的动态内容自动生成 ETag 头。
NGINX module for adding ETag to dynamic content
·
httpserverlocation
语法dynamic_etag on | off | $var;
默认值off
上下文http, server, location
参数1
说明
dynamic_etag 指令是 NGINX 模块的一部分,旨在为动态生成的内容添加 ETag 头。ETag 是服务器分配给资源特定版本的唯一标识,允许客户端发起条件请求,并通过避免对未更改资源返回完整响应来潜在地减少带宽使用。该指令可以在 http、server 或 location 上下文中设置,从而在服务器配置中灵活定义其作用范围。
启用后,该模块通过读取整个响应主体并对其进行哈希来计算 ETag。这种方法对由后端脚本(例如 PHP)生成的动态内容特别有用,但也有一个注意事项:读取整个响应可能违背 NGINX 的典型轻量级请求处理模型。此外,由于该模块依赖于对响应主体计算哈希,它不会为 HEAD 请求生成 ETag,因为没有可供哈希的主体,这可能导致 ETag 处理上的不一致。用户应确保动态内容能从 ETag 中获益,并且服务器响应不会在每次请求时发生变化。
配置示例
http {
server {
location ~ \.php$ {
dynamic_etag on;
fastcgi_pass ...;
}
}
}⚠
由于没有响应主体,HEAD 请求不会返回 ETags。
⚠
将 dynamic_etag 应用于频繁变化的动态内容可能无法带来有效的缓存收益。
⚠
确保响应主体一致且适合用于 ETag 生成,以避免缓存数据出现问题。
⚠
避免在每次请求都会变化的响应上使用 dynamic_etag,除非已采取适当的缓存措施。