2010-03-17 100 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來區分普通靜態文件,預壓縮靜態文件和動態壓縮的文件。

相關問題