在Nginx服務器配置文件中可以通過配置Gzip的使用,可以配置在http塊,server 塊或者location塊中設置,Nginx服務器可以通過ngx_http_gzip_module模塊、ngx_http_static_module 模塊功能ngx_http_gunzip_module模塊對這些指令進行分析和處理。
一:ngx_http_gzip_module模塊處理的指令:
1、gzip:
用於打開或者關閉gzip壓縮的功能,用法如下:
gzip on | off ; #默認為off
2、gzip_buffers:
用於指定gzip功能壓縮文件時使用的緩存空間的大小,語法結構為:
gzip_buffers numner | size ; number #指定Nginx服務器需要向服務器申請的緩存空間的個數 size #指定每個緩存空間的大小,從Nginx 0.7.8開始,默認number * siez的的值為128,其中size取系統中內存頁一頁的大小,為4k或者8k等
gzip_buffers 32 4k | 12 8k;
3、gzip_comp_level
指定gzip壓縮級別,級別為1-9,默認為1,級別越高壓縮率越高即壓縮后的文件越小,但是越占用CPU,壓縮率越小壓縮后的文件越大,但是節約CPU。
gzip_comp_level 4; #推薦先設置為中間的值,比如4或者5
4、gzip_disbale
針對不同客戶端發起的請求進行有選擇的打開或關閉gzip命令,后面跟瀏覽器的名稱,用法如下:
gzip_disable MSIE[1-6]\. #使用正則表達式可以匹配UC字符串中MSIE 1-6 的瀏覽器,這三個瀏覽器在發起請求后Nginx將不進行數據包的壓縮。
5、gzip_http_verson
早期的一些瀏覽器或者http客戶端可能不支持gzip壓縮,因此有客戶有時候會看到亂碼,那是應為客戶端無法進行解壓,因此可以根據不同的http協議版本進行選擇性的打開或關閉gzip功能,用法如下:
gzip_http_version 1.0 | 1.1; #對使用htto協議1.0和1.1的請求進行壓縮
6、gzip_min_length
設置最少壓縮的數據包大小,小於此值的數據包將不被壓縮,因為大量的小的數據壓縮后沒有明顯的效果還占用了CPU的資源,因此可以設置最少多大的數據才進行壓縮,用法如下:
gzip_min_length 1024; #默認為20,建議設置位1KB,如果設置為0則表示壓縮全部數據包
7、gzip_proxine
在Nginx 服務器作為反向代理的時候有效,用於設置nginx 服務器是否對后端返回的結果進行gzip壓縮,用法如下:
gzip_proxied off | any; #off為關閉,any為壓縮所有后端服務器返回的數據。
8、gzip_types
設置Nginx服務器可以根據響應頁面的類型進行選擇性的打開或關閉gzip功能,用法如下:
gzip_types text/plain application/x-javascript text/css application/xml; #一般情況下如此設置
9、gzip_vary
用於設置是否在使用gzip功能時發送帶有"vary:Accept-Encoding" 頭域的響應頭部,該頭域的主要功能時要告訴客戶端數據已經在服務器進行了壓縮,默認設置為off,用法如下:
gzip_vary on| off; #默認為off
還可以使用Nginx 配置的add_header指令強制在Nginx服務器的響應頭部添加“Vary:Accept-Encoding”也可以實現相同的效果。
二:ngx_http_gzip_static_module 模塊:
該模塊輔助用於搜索和發送經過gzip功能壓縮的數據,這些數據以*.gz作為后綴名存儲在服務器上,如果客戶端請求的數據之前被壓縮過,並且客戶端的瀏覽器支持壓縮,將直接范湖壓縮后的數據,該模塊使用的是靜態編碼,在http響應頭部包含content-length頭域來指明報文的長度,用於服務器可以確定響應數據的長度的情況,而ngx_http_gzip_module使用chunked編碼動態壓縮,主要用於服務器無法確定響應數據長度的情況,比如較大文件的下載等情形,此時就要實時生成數據的長度,用法與ngx_http_gzip_module一樣,如下:
1、gzip_static
gzip_static off | on | always; #on為開啟並檢查客戶端瀏覽器是否中吃gzip壓縮功能,off為關閉,always一直發送gzip壓縮文件,而不檢查瀏覽器是否支持gzip壓縮
注:這是一個可選模塊,如果要使用,必須在編譯nginx時添加--with-http_gzip_static_module編譯,與該模塊有關的 指令與ngx_http_gzip_module的模塊使用方法是一致的,本模塊有gzip_static、gzip_http_version、gzip_proxied、gzip_disable和gzip_vary等。
三:ngx_http_gunzip_module 模塊處理的兩個指令
1、gunzip
設置Nginx服務器對不支持gzip的客戶端返回解壓后的數據,如果客戶的瀏覽器支持壓縮還仍然返回壓縮的后的數據,及可以同時響應支持gzip的瀏覽器進程壓縮,有可以響應不支持gzip的瀏覽器。
gunzip on|off ;#on為打開off為關閉
2、gunzip_buffers #用於設置nginx服務器解壓gzip文件時候使用的緩存空間大小的,用法如下:
gunzip_buffers number size; #number為nginx服務器向系統向系統申請緩存空間的個數,size為每個空間的大小,單位為k,默認情況下number * size的大小為128k,其中size 的值取系統內存頁一頁的大小為4KB或者8KB即可,用法如下: gunzip_buffers 32 4k | 16 8k; #與ngx_http_gzip_module模塊下的使用方法一致。
注:這是一個可選模塊,如果要使用需要在nginx 編譯安裝的時候使用--with-http_gunzip_module 指令進行編譯
四:緩存功能:
1.memcached緩存數據庫常用數據。
2.xcache緩存php編譯的結果,可以在多個進程之間共享xcode結果。
3.nginx的緩存是緩存opcode處理后的結果,避免客戶端請求同一個頁面而導致程序每次都處理一下,即再訪問同一個頁面,直接使用處理后的緩存即可直接返回。
五:正向代理和反向代理:
1.正向代理:工作在用戶前端,用戶請求的所有內容都經過代理服務器。
2.反向代理:工作在服務器前端,只代理請求次服務器的客戶端請求,被其代理的服務器叫做"代理服務器"或者"上游服務器"。
