Ruby on rails Rails/NGinx-无法获得页面工作的gzip压缩

Ruby on rails Rails/NGinx-无法获得页面工作的gzip压缩,ruby-on-rails,nginx,passenger,Ruby On Rails,Nginx,Passenger,我有一个Rails应用程序(3.2.x)在Ubuntu上运行,并使用Passenger 我添加了选项 gzip on; 进入nginx.conf文件,但使用 http://www.gidnetwork.com/tools/gzip-test.php 显示未使用压缩 我的nginx.conf文件如下所示: worker_processes 8; events { worker_connections 1024; } http { passenger_root /usr/lo

我有一个Rails应用程序(3.2.x)在Ubuntu上运行,并使用Passenger

我添加了选项

gzip on;
进入nginx.conf文件,但使用

http://www.gidnetwork.com/tools/gzip-test.php
显示未使用压缩

我的nginx.conf文件如下所示:

worker_processes  8;
events {
    worker_connections  1024;
}
http {
    passenger_root /usr/local/rvm/gems/ruby-1.9.3-p392/gems/passenger-3.0.19;
    passenger_ruby /usr/local/rvm/wrappers/ruby-1.9.3-p392/ruby;
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;
    gzip  on;
    server {
      listen    80;
      server_name  xxx.com;
      root /var/www/xxx/public;  
      rewrite        ^ https://$server_name$request_uri? permanent;
      passenger_enabled on;
    }
    server {
      listen 443;
      server_name xxx.com;
      root /var/www/xxx/public;
      passenger_enabled on;
      ssl on;
      ssl_certificate     /etc/ssl/private/ssl_xxx_com_certificate.txt;
      ssl_certificate_key /etc/ssl/private/ssl_xxx_com_private_key.txt;
      ssl_client_certificate /etc/ssl/private/cabundle.txt;
      ssl_session_timeout  5m;
      ssl_protocols  SSLv2 SSLv3 TLSv1;
      ssl_ciphers  HIGH:!aNULL:!MD5;
      ssl_prefer_server_ciphers   on;
    }
}

您的问题是没有指定gzip的类型。将以下
gzip\u类型添加到配置文件中:

gzip on;
gzip_types text/css text/xml application/x-javascript application/atom+xml text/mathml text/plain text/vnd.sun.j2me.app-descriptor text/vnd.wap.wml text/x-component;
您可能需要调整类型以适合您的配置


请注意,默认情况下,
text/html
处于启用状态,因此您不必指定它。如果使用http调试器,您将看到当前配置(没有上述
gzip_类型
行)确实在
php
文件上执行gzip压缩,但在其他类型上不执行

您的问题是没有指定gzip的类型。将以下
gzip\u类型添加到配置文件中:

gzip on;
gzip_types text/css text/xml application/x-javascript application/atom+xml text/mathml text/plain text/vnd.sun.j2me.app-descriptor text/vnd.wap.wml text/x-component;
您可能需要调整类型以适合您的配置


请注意,默认情况下,
text/html
处于启用状态,因此您不必指定它。如果使用http调试器,您将看到当前配置(没有上述
gzip_类型
行)确实在
php
文件上执行gzip压缩,但在其他类型上不执行

你的gzip正在工作。也许你不应该用网络浏览器来验证这一点。我使用了curl,它表明gzip是打开的。请看最后一行

 curl -IL -H "accept-encoding: gzip" http://vircurex.com/
HTTP/1.1 301 Moved Permanently
Server: nginx/1.2.6
Date: Mon, 25 Mar 2013 10:52:42 GMT
Content-Type: text/html
Content-Length: 184
Connection: keep-alive
Location: https://vircurex.com/

HTTP/1.1 200 OK
Content-Type: text/html; charset=utf-8
Connection: keep-alive
Status: 200
X-Powered-By: Phusion Passenger (mod_rails/mod_rack) 3.0.19
X-UA-Compatible: IE=Edge,chrome=1
ETag: "b36d8bb7e713ad93aeb6e5fb1e351135"
Cache-Control: max-age=0, private, must-revalidate
Set-Cookie: v0100session=BAh7CUkiD3Nlc3Npb25faWQGOgZFRkkiJTEyZjQ0ZGJjOWI0NTQ4ZGMwNGQxZWM2YTNiZWJjZDcxBjsAVEkiFmlucHV0X2RldmljZV90eXBlBjsARkkiCk1PVVNFBjsARkkiFGhvdmVyX3N1cHBvcnRlZAY7AEZUSSIQX2NzcmZfdG9rZW4GOwBGSSIxRmNkOGViQXlTL0t1K3l2TTlVVUQwbmFZVW1VZHpoQ1kwT2JkZlhrU3pDZz0GOwBG--3cc39d4d71943811224fb350b8ed6cd0a7d6e363; path=/; HttpOnly
X-Request-Id: c1be4f7e0ebaffbdfd7a1da0b47143c8
X-Runtime: 0.154884
Date: Mon, 25 Mar 2013 10:52:47 GMT
X-Rack-Cache: miss
Server: nginx/1.2.6 + Phusion Passenger 3.0.19
Content-Encoding: gzip

你的gzip正在工作。也许你不应该用网络浏览器来验证这一点。我使用了curl,它表明gzip是打开的。请看最后一行

 curl -IL -H "accept-encoding: gzip" http://vircurex.com/
HTTP/1.1 301 Moved Permanently
Server: nginx/1.2.6
Date: Mon, 25 Mar 2013 10:52:42 GMT
Content-Type: text/html
Content-Length: 184
Connection: keep-alive
Location: https://vircurex.com/

HTTP/1.1 200 OK
Content-Type: text/html; charset=utf-8
Connection: keep-alive
Status: 200
X-Powered-By: Phusion Passenger (mod_rails/mod_rack) 3.0.19
X-UA-Compatible: IE=Edge,chrome=1
ETag: "b36d8bb7e713ad93aeb6e5fb1e351135"
Cache-Control: max-age=0, private, must-revalidate
Set-Cookie: v0100session=BAh7CUkiD3Nlc3Npb25faWQGOgZFRkkiJTEyZjQ0ZGJjOWI0NTQ4ZGMwNGQxZWM2YTNiZWJjZDcxBjsAVEkiFmlucHV0X2RldmljZV90eXBlBjsARkkiCk1PVVNFBjsARkkiFGhvdmVyX3N1cHBvcnRlZAY7AEZUSSIQX2NzcmZfdG9rZW4GOwBGSSIxRmNkOGViQXlTL0t1K3l2TTlVVUQwbmFZVW1VZHpoQ1kwT2JkZlhrU3pDZz0GOwBG--3cc39d4d71943811224fb350b8ed6cd0a7d6e363; path=/; HttpOnly
X-Request-Id: c1be4f7e0ebaffbdfd7a1da0b47143c8
X-Runtime: 0.154884
Date: Mon, 25 Mar 2013 10:52:47 GMT
X-Rack-Cache: miss
Server: nginx/1.2.6 + Phusion Passenger 3.0.19
Content-Encoding: gzip


不起作用。我添加了一行,重新启动服务,它仍然显示没有压缩。@Kumala-正如我前面提到的,我看到主php文件是gzip文件。但是,不会压缩任何脚本文件。你重新启动了nginx服务,对吗?我重新启动了服务器,对了,顺便说一句。该网站显然不是xxx.com,那只是一个占位符。我使用的是Safari Web Inspector,它显示大小=已传输(因此未压缩),即使内容类型为SOW文本/html@Kumala-您确定nginx正在您的网站前运行吗?我这样问是因为在html标题中,您的服务器显示为Apache/1.3.41。在我的网站上,它显示nginx作为服务器。@Kumala-你的gzip在那里为我工作。我试过Firefox和Internet Explorer,但都不行。我添加了一行,重新启动服务,它仍然显示没有压缩。@Kumala-正如我前面提到的,我看到主php文件是gzip文件。但是,不会压缩任何脚本文件。你重新启动了nginx服务,对吗?我重新启动了服务器,对了,顺便说一句。该网站显然不是xxx.com,那只是一个占位符。我使用的是Safari Web Inspector,它显示大小=已传输(因此未压缩),即使内容类型为SOW文本/html@Kumala-您确定nginx正在您的网站前运行吗?我这样问是因为在html标题中,您的服务器显示为Apache/1.3.41。在我的网站上,它显示nginx作为服务器。@Kumala-你的gzip在那里为我工作。我试过Firefox和Internet Explorer,也在chrome的inspector中看到了“Content Encoding:gzip”。有趣的是,它在Safari中对你不起作用。你解决问题了吗?页面的内容类型为“text/html”。所以默认情况下gzip应该是打开的。这是令人困惑的部分,是的,内容编码显示:gzip。但是Safari说,大小=转移(即不压缩),并且上面的工具也说:不压缩。我之前在那个服务器上安装了Apache,Safari和Gidnetwork上的那个工具都告诉我:压缩已经启动。所以问题是,Nginx是否提供误报?@Kumala我检查了chrome和Safari中的请求头。问题是Safari不发送这个头,但是chrome发送它:“接受编码:gzip,deflate,sdch”。所以nginx不会用gzip文本响应,因为safari没有要求它。Apache可能总是对内容进行gzip处理,不管发生什么。我更喜欢nginx的处理方式this@Kumala另一方面,您可以在nginx配置文件中添加以下指令:“gzip_comp_level 5;”。默认级别1是最小压缩(最快)。“我知道5是一个很好的值,”在我读过的一些文章中建议道。我的chrome显示的内容为6.1k,小于未压缩的22k。所以它确实在chrome中工作。在chrome的inspector中也看到了“Content Encoding:gzip”。有趣的是,它在Safari中对你不起作用。你解决问题了吗?页面的内容类型为“text/html”。所以默认情况下gzip应该是打开的。这是令人困惑的部分,是的,内容编码显示:gzip。但是Safari说,大小=转移(即不压缩),并且上面的工具也说:不压缩。我之前在那个服务器上安装了Apache,Safari和Gidnetwork上的那个工具都告诉我:压缩已经启动。所以问题是,Nginx是否提供误报?@Kumala我检查了chrome和Safari中的请求头。问题是Safari不发送这个头,但是chrome发送它:“接受编码:gzip,deflate,sdch”。所以nginx不会用gzip文本响应,因为safari没有要求它。Apache可能总是对内容进行gzip处理,不管发生什么。我更喜欢nginx的处理方式this@Kumala另一方面,您可以在nginx配置文件中添加以下指令:“gzip_comp_level 5;”。默认级别1是最小压缩(最快)。“我知道5是一个很好的值,”在我读过的一些文章中建议道。我的chrome显示的内容为6.1k,小于未压缩的22k。所以它确实在chrome中工作。