Nginx gzip引數詳解及常見問題(已解決)

2022-05-26 16:54:10 字數 2950 閱讀 5555

nginx實現資源壓縮的原理是通過ngx_http_gzip_module模組攔截請求,並對需要做gzip的型別做gzip,ngx_http_gzip_module是nginx預設整合的,不需要重新編譯,直接開啟即可

這個沒的說,開啟或關閉gzip

設定用於處理請求壓縮的緩衝區數量和大小。比如32 4k表示按照記憶體頁(one memory page)大小以4k為單位(即乙個系統中記憶體頁為4k),申請32倍的記憶體空間。建議此項不設定,使用預設值。

設定gzip壓縮級別,級別越底壓縮速度越快檔案壓縮比越小,反之速度越慢檔案壓縮比越大

我們以乙個大小為92.6k的指令碼檔案為例,如下所示。其中最後三個數值分別表示壓縮比、包大小、平均處理時間(使用ab壓測,100使用者併發下,./ab -n 10000 -c 100 -h 'accept-encoding: gzip')以及cpu消耗。

從這我們可以得出結論:

因此,建議:

通過表示式,表明哪些ua頭不使用gzip壓縮

當返回內容大於此值時才會使用gzip進行壓縮,以k為單位,當值為0時,所有頁面都進行壓縮。

用於識別http協議的版本,早期的瀏覽器不支援gzip壓縮,使用者會看到亂碼,所以為了支援前期版本加了此選項。預設在http/1.0的協議下不開啟gzip壓縮。

因為瀏覽器基本上都支援http/1.1。然而這裡面卻存在著乙個很容易掉入的坑,也是筆者從生產環境中乙個詭異問題中發現的:

明明開啟gzip功能,但是未生效。

原因定位:

為什麼這樣呢?

在應用伺服器前,公司還有一層nginx的集群作為七層負責均衡,在這一層上,是沒有開啟gzip的。

如果我們使用了proxy_pass進行反向**,那麼nginx和後端的upstream server之間預設是用http/1.0協議通訊的。

如果我們的cache server也是nginx,而前端的nginx沒有開啟gzip。

同時,我們後端的nginx上沒有設定gzip_http_version為1.0,那麼cache的url將不會進行gzip壓縮。

我相信,以後還有人會入坑,比如你用apache ab做壓測,如果不是設定gzip_http_version為1.0,你也壓不出gzip的效果(同樣的道理)。希望寫在這裡對大家有幫助

nginx做為反向**的時候啟用:

增加響應頭」vary: accept-encoding」

設定需要壓縮的mime型別,如果不在設定型別範圍內的請求不進行壓縮

參考文章

所以mime-type中應該新增字型型別:

字型型別副檔名

content-type

.eot

.ttf

font/ttf

.otf

font/opentype

.woff

font/x-woff

.svg

image/svg+xml

Nginx gzip引數配置

nginx實現資源壓縮的原理是通過ngx http gzip module模組攔截請求,並對需要做gzip的型別做gzip,ngx http gzip module是nginx預設整合的.1.開啟壓縮.引數寫法 syntax gzip on off default gzip off 應用作用域 co...

c std bind 詳解及引數解析

bind std function.cpp 定義控制台應用程式的入口點。include stdafx.h include include include include 學習bind的用法 void f int n1,int n2,int n3,const int n4,int n5 int g i...

std bind 詳解及引數解析

bind std function.cpp 定義控制台應用程式的入口點。include stdafx.h include include include include 學習bind的用法 void f int n1,int n2,int n3,const int n4,int n5 int g i...