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

如何让Nginx在Gzip压缩后发送强ETag?

解决方案

方案一:强制Nginx生成强ETag(推荐)

如果你的Nginx版本在1.3.3及以上,直接配置强制生成强ETag,即使响应被gzip压缩:

http {
    # 强制生成强ETag,替代默认压缩时自动生成的弱ETag(带W/前缀)
    etag strong;
    gzip on;
    gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
    # 告知CDN/客户端按压缩格式区分缓存
    gzip_vary on;
}

配置后,Nginx会基于原始未压缩内容生成无W/前缀的强ETag,同时完成gzip压缩,Akamai即可正常识别并缓存响应。

方案二:由Node生成强ETag,Nginx转发不修改

若Nginx版本较低不支持etag strong;,可让Node服务生成强ETag,Nginx关闭自身ETag生成逻辑,直接转发Node的ETag:

  1. Node层配置:确保fastify服务生成强ETag(fastify默认生成强ETag,无需额外配置,除非手动修改过),同时设置Vary: Accept-Encoding头,让CDN区分不同压缩格式的缓存。
  2. Nginx配置:
server {
    # 关闭Nginx自身的ETag生成
    etag off;
    gzip on;
    gzip_types text/plain text/css application/json application/javascript;
    gzip_vary on;

    location / {
        proxy_pass http://your-node-server;
        # 转发Node生成的ETag头
        proxy_pass_header ETag;
        # 转发Vary头
        proxy_pass_header Vary;
    }
}

此方案下,Nginx仅负责压缩,ETag由Node生成并直接透传给Akamai,规避弱ETag问题。

方案三:调整Akamai缓存策略(备选)

联系Akamai技术支持,确认是否存在配置项可开启对弱ETag的缓存支持。部分Akamai配置允许忽略ETag的强弱标识(W/前缀),直接基于ETag值进行缓存,若能开启此配置,无需修改Nginx/Node现有逻辑。

性能优化补充(针对Node压缩QPS下降问题)

之前使用fastify-compress导致QPS下降,核心原因是Node单线程处理压缩会占用大量CPU资源。推荐始终让Nginx(或其他反向代理)负责响应压缩——Nginx的压缩模块为异步实现,性能远高于Node层压缩,不会影响服务QPS。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 08:35:11