Nginx不提供gzip压缩内容

时间:2017-07-24 19:45:59

标签: javascript nginx compression webserver gzip

我遇到nginx 1.13.3(作为docker容器运行)和gzip压缩内容的问题。服务器未发送压缩文件。搜索和反复试验的小时数无法解决此问题:

  • 我有一个简单的index.html,只有一个脚本标记到javascript文件。
  • 这个javascript文件已经在fs上gzip(gzip:~360KB,未压缩:~1,2MB)

我的期望:

  1. 如果我没有进一步的nginx配置,js文件按原样提供,我在浏览器中得到一个解析错误。 =>这“按预期”起作用
  2. 我配置以下(或与js文件匹配的其他位置块):

    if ($uri = "/main.js") {
        add_header Content-Encoding gzip;
    }
    
  3. 这为文件提供了完整的1,2 MB且没有Content-Encoding标头。浏览器(在本例中为Firefox,但也在Chrome中)发送以下请求标头:

    User-Agent      "Mozilla/5.0 (Windows NT 10.0;… Gecko/20100101 Firefox/54.0"
    Accept          "*/*"
    Accept-Language "en,de;q=0.7,en-US;q=0.3"
    Accept-Encoding "gzip, deflate"
    Connection      "keep-alive"
    Pragma          "no-cache"
    Cache-Control   "no-cache"
    

    回复标题:

    Server          "nginx/1.13.3"
    Date            "Mon, 24 Jul 2017 19:35:01 GMT"
    Content-Type    "text/plain"
    Last-Modified   "Mon, 24 Jul 2017 19:06:10 GMT"
    Connection      "keep-alive"
    Etag            "\"59764522-53db0\""
    Accept-Ranges   "bytes"
    Content-Length  "1281624"
    

    但请求日志显示压缩文件的内容长度:

    GET /main.js HTTP/1.1" 200 343472
    

    我也尝试过使用“gzip on”的ad-hoc压缩和带有未压缩文件的相应文件类型,但这也不起作用。

    完整的nginx.conf:

    events {
        worker_connections 1024;
    }
    
    http {
         server {
              listen       80;
              server_name  localhost;
              # gzip off;
              #gzip_types text/plain application/javascript;
    
              location / {
                  index     index.html  index.htm;
                  root /usr/share/nginx/html;
                  add_header X-URI $uri;
    
                  if ($uri = "/main.js") {
                      add_header Content-Encoding gzip;
                  }
              }
         }
    }
    

    也许有人知道我做错了什么。我曾经多次使用nginx配置这样的gzip压缩,而且它总能工作....

    谢谢!

0 个答案:

没有答案