59

我需要在 nginx 服务器上启用 gzip 压缩。正如我从 firfox firebug NET 工具中观察到的那样,我发现 html 文件是 gzip 压缩的。但不是 javascript 文件和 CSS 文件。

我已经检查了Mime.types和 nginx 配置文件/etc/nginx/ngnix.conf并没有发现任何问题。仍然无法看到 css 和 javascript Gzip 压缩。我的 NGINX.conf 条目如下

gzip on;
gzip_disable "msie6";

gzip_vary on;
gzip_proxied any;
gzip_comp_level 6;
gzip_buffers 16 8k;
gzip_http_version 1.1;
gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;
4

5 回答 5

164

这是我目前在生产中使用的工作配置。

http://pastie.org/10870547

gzip on;
gzip_disable "msie6";

gzip_comp_level 6;
gzip_min_length 1100;
gzip_buffers 16 8k;
gzip_proxied any;
gzip_types
    text/plain
    text/css
    text/js
    text/xml
    text/javascript
    application/javascript
    application/json
    application/xml
    application/rss+xml
    image/svg+xml;

此配置已通过 tools.pingdom.com 进行测试。

于 2012-09-28T17:17:40.503 回答
38

您可以从html5 样板代码中找到示例配置。

  # 启用 Gzip
  gzip打开;
  gzip_http_version 1.0;
  gzip_comp_level 2;
  gzip_min_length 1100;
  gzip_buffers 4 8k;
  gzip_proxied 任何;
  gzip_types
    # text/html 总是被 HttpGzipModule 压缩
    文本/CSS
    文本/javascript
    文本/xml
    文本/纯文本
    文本/x 组件
    应用程序/javascript
    应用程序/json
    应用程序/xml
    应用程序/rss+xml
    字体/真实类型
    字体/opentype
    应用程序/vnd.ms-fontobject
    图片/svg+xml;

  gzip_static 开启;

  gzip_proxied 过期无缓存无存储私有身份验证;
  gzip_disable "MSIE [1-6]\.";
  gzip_vary on;

于 2015-05-04T19:57:01.807 回答
7

如果您的一些文件被压缩而另一些没有,那么您的 gzip 正在工作,但您可能错过了gzip_types中的定义。例如,javascript 文件可能会在标头中返回以下任何类型:

  • 应用程序/javascript
  • 应用程序/x-javascript
  • 文本/javascript

要压缩所有 javascript 文件,所有三个定义都应包含在 gzip_types 中。

您需要在响应标头中检查此类未压缩文件返回的内容类型,然后确保它也在 gzip_types 中定义。

于 2014-07-08T20:48:41.143 回答
2

您的 gzip 条目是否在 js、css 等的 nginx 配置“范围”内?正在服务资产?我问是因为如果您使用某种框架,有时会有不同的 location {...} 块来处理 html 请求和资产。

此外,当您在浏览器中进行测试时,请确保您进行硬刷新以强制服务器为您提供您正在查看的任何内容的“新副本”。

最后,您可以使用 gzip_types * 来允许对任何内容进行 gzip 压缩。如果这是一个好的做法,也许其他人可以插话。

于 2013-12-04T15:32:30.510 回答
1

要压缩 SVG,此行是正确的:

image/svg+xml svg svgz;
于 2015-05-23T09:50:11.853 回答