nginx gzip_static 删除 Content-Encoding 标头

nginx gzip_static 删除 Content-Encoding 标头

我的http块定义了各种 gzip 规则。然后在我预压缩 gzip 文件的地方,我使用该gzip_static模块。例如:

http {
    gzip on;
    #...
    server {
        #other vhost rules
        location /assets/ {
            gzip_static on;
        }
    }
}

对于不以 /assests 开头的 URL,nginx 会发送标头Content-Encoding: gzip。但是,诸如这样的 URL/assets/css/style.css肯定会返回压缩响应,但没有 Content-Encoding 标头。

这是预期的行为吗?应该如何配置 nginx?

答案1

对我来说,只打开 gzip_static 不起作用。我必须使用 gzip_proxied 才能开始工作。

location /as/ {
  gzip_static on;
  gzip_proxied    expired no-cache no-store private auth;

  gzip_min_length 500; # optional
  gzip_types      text/plain application/xml text/css; # optional

  add_header Z_LOCATION "gz static location block"; add_header URI $uri; # DEBUG info
}

请注意,最后一行添加了另外两个有助于调试的标头。您可以使用 Firefox 的一款出色插件“Live HTTP Headers”来查看这些标头,我发现该插件对于调试大量与标头和缓存相关的内容非常有用。请注意,“curl -I”不起作用,因为它不会发送标头来表明它接受 gzip 编码。

您还应该确保文件具有相同的修改日期

touch style.css style.css.gz

以下是我使用上述位置配置时收到的标头

HTTP/1.1 200 OK
Server: nginx
Date: Wed, 06 Jan 2016 20:07:18 GMT
Content-Type: text/css
Last-Modified: Wed, 06 Jan 2016 19:55:15 GMT
Etag: "568d7123-84c"
Z_LOCATION: gz static location block
URI: /as/style.css
Via: 1.1 BC5-ACLD
Connection: Keep-Alive
Content-Encoding: gzip
Age: 0

答案2

我遇到了一个location ~* \.(css|js|...) { expires 7d }把事情搞乱了的块。我尝试了一下位置块,现在一切似乎都正常了。

相关内容