2010-03-17 78 views
48

如何检查nginx是否提供.gz版本的静态文件(如果存在)?如何检查nginx gzip_static模块是否正常工作?

我编译nginx与gzip静态模块,但我没有看到任何提到我的日志中提供的.gz版本。 (我已经在同一个目录中缩小了global.js和global.css文件的.gz版本)。

nginx.conf的相关部分看起来是这样的:

gzip on; 
gzip_static on; 
gzip_http_version 1.0; 
gzip_disable "MSIE [1-6]\."; 
gzip_vary on; 

gzip_comp_level 2; 
gzip_proxied any; 
gzip_types text/plain text/html text/css application/x-javascript text/xml application/xml application/xml+rss text/javascript; 

任何指针将不胜感激。

回答

81

使用strace。首先,你需要检测nginx进程的PID:

# ps ax | grep nginx 
25043 ?  Ss  0:00 nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf 
25044 ?  S  0:02 nginx: worker process 

好吧,所以25044是工作进程。现在,我们追查它:

# strace -p 25044 2>&1 | grep gz 
open("/var/www/css/ymax.css.gz", O_RDONLY|O_NONBLOCK) = 438 
open("/var/www/css/patches/patch_my_layout.css.gz", O_RDONLY|O_NONBLOCK) = -1 ENOENT (No such file or directory) 
open("/var/www/yaml/core/iehacks.css.gz", O_RDONLY|O_NONBLOCK) = -1 ENOENT (No such file or directory) 
open("/var/www/js/koznazna5.js.gz", O_RDONLY|O_NONBLOCK) = -1 ENOENT (No such file or directory) 
open("/var/www/css/ymax.css.gz", O_RDONLY|O_NONBLOCK) = 216 

正如你所看到的,它试图找到.gz版本的文件。

+12

注意:'strace'通过多次添加'-p xyz'参数来支持多个PID。当你有多个nginx工作进程时很有用。 – 2012-05-11 21:22:13

+0

如果您触摸服务器上的资产文件,并在浏览器上使用隐身/隐私模式选项卡,则会强制重新投放文件,以便上述技术可以保证结果不会出现任何缓存(希望)。 – 2013-09-15 11:17:58

+0

在OSX上使用'dtruss' – 2013-09-19 15:53:23

15

我将禁用自动压缩和日志gzip_ratio

http { 
    gzip off; 
    gzip_static on; 

    log_format log_with_ratio "... $gzip_ratio ..."; 

    server { 
     access_log /var/log/nginx/file.log log_with_ratio; 
    } 
} 

注意,你可能会覆盖gzipgzip_staticaccess_log每台服务器和位置水平。

+2

这实际上测试如果nginx是gzipping的东西即时(即gzip),但如果你试图用它来看看gzip_static是否就会输出一个连字符...(使用nginx 1.2.6 )。但是,如果你的gzip_static和gzip关闭,并且内容编码是gzip,我认为你可以假设它正常工作 – concept47 2013-01-29 10:19:39

19

更改非压缩文件的内容。然后touch这两个文件(同时 - 即:在touch的相同实例中)。如果在浏览器中加载文件(缓存擦除),您将获得未更改的文件,则nginx将处理静态缓存压缩文件。

一个简单的方法来避免“我只是取高速缓存?”担心是从命令行取curl因为curl不缓存。

-3

我通常使用Chrome开发工具并查看相关文件的文件大小。

+0

这是如何帮助您知道服务器是否即刻进行了压缩或者它是否使用了已经预先压缩的文件? – RationalDev 2015-11-21 12:15:49

+0

上帝点。谢谢你的减号:) – Spock 2016-01-28 09:46:16

+0

减去不是我。 – RationalDev 2016-01-28 10:05:58

1

有是我注意到有关ETag响应标题的一些提示。

如果静态文件是由nginx的服务,然后头看起来是这样的:ETag: "135a-BQhu6KL71dyeCXcVZme6ug",然而,当nginx的被压缩的响应(通过gzip的模块),它看起来像这样:ETag: W/"135a-BQhu6KL71dyeCXcVZme6ug"(通知W/)。

您可以使用此以及Content-Encoding: gzip来区分普通静态文件,预压缩静态文件和动态压缩的文件。

相关问题