在Magento的NGINX服务器上为CSS和JS文件启用GZIP

Enable GZIP for CSS and JS files on NGINX server for Magento

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

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

1
2
3
4
5
6
7
8
9
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;


这是我目前在生产环境中使用的有效配置。

http://pastie.org/10870547

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
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。

进行了测试。


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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
  # Enable Gzip
  gzip  on;
  gzip_http_version 1.0;
  gzip_comp_level 2;
  gzip_min_length 1100;
  gzip_buffers     4 8k;
  gzip_proxied any;
  gzip_types
    # text/html is always compressed by HttpGzipModule
    text/css
    text/javascript
    text/xml
    text/plain
    text/x-component
    application/javascript
    application/json
    application/xml
    application/rss+xml
    font/truetype
    font/opentype
    application/vnd.ms-fontobject
    image/svg+xml;

  gzip_static on;

  gzip_proxied        expired no-cache no-store private auth;
  gzip_disable       "MSIE [1-6]\\.";
  gzip_vary           on;


如果某些文件被压缩而另一些文件未压缩,则说明您的gzip工作正常,但是您可能错过了gzip_types中的定义。例如,javascript文件可能在标头中返回以下任何类型的内容:

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

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

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


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

1
image/svg+xml svg svgz;

您的gzip条目是否位于js,css等的nginx配置" scope "中?资产被送达?我问,因为如果您使用的是某种框架,有时会使用不同的位置{...}块来处理html请求和资产。

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

最后,您可以使用gzip_types *来压缩所有内容。如果这不是一个好的做法,也许其他人也可以插话。