Nginx 啓用gzip壓縮

1. 網頁壓縮javascript

  網頁壓縮是一項由 WEB 服務器和瀏覽器之間共同遵照的協議,也就是說 WEB 服務器和瀏覽器都必須支持該技術,所幸的是如今流行的瀏覽器都是支持的,包括 IE、FireFox、Opera 等;服務器有 Apache 和 IIS 等。雙方的協商過程以下:  
  首先瀏覽器請求某個 URL 地址,並在請求的頭 (head) 中設置屬性 accept-encoding 值爲 gzip, deflate,代表瀏覽器支持 gzip 和 deflate 這兩種壓縮方式(事實上 deflate 也是使用 gzip 壓縮協議,下面咱們會介紹兩者之間的區別);php


  WEB 服務器接收到請求後判斷瀏覽器是否支持壓縮,若是支持就傳送壓縮後的響應內容,不然傳送不通過壓縮的內容;
  瀏覽器獲取響應內容後,判斷內容是否被壓縮,若是是則解壓縮,而後顯示響應頁面的內容。css


  在實際的應用中咱們發現壓縮的比率每每在 3 到 10 倍,也就是原本 50k 大小的頁面,採用壓縮後實際傳輸的內容大小隻有 5 至 15k 大小,這能夠大大節省服務器的網絡帶寬,同時若是應用程序的響應足夠快時,網站的速度瓶頸就轉到了網絡的傳輸速度上,所以內容壓縮後就能夠大大的提高頁面的瀏覽速度。html

 

2. 配置啓用gzip前端

gzip on;
gzip_min_length  5k;
gzip_buffers     4 16k;
#gzip_http_version 1.0;
gzip_comp_level 3;
gzip_types       text/plain application/javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png;
gzip_vary on;

1):wq保存退出,從新加載Nginxjava

/usr/local/nginx/sbin/nginx -s reloadjquery

 

2)配置指令詳細註釋:

gzip on|off
# 默認值: gzip off
# 開啓或者關閉gzip模塊 nginx

gzip_static on|off

# nginx對於靜態文件的處理模塊
# 該模塊能夠讀取預先壓縮的gz文件,這樣能夠減小每次請求進行gzip壓縮的CPU資源消耗。該模塊啓用後,nginx首先檢查是否存在請求靜態文件的gz結尾的文件,若是有則直接返回該gz文件內容。爲了要兼容不支持gzip的瀏覽器,啓用gzip_static模塊就必須同時保留原始靜態文件和gz文件。這樣的話,在有大量靜態文件的狀況下,將會大大增長磁盤空間。咱們能夠利用nginx的反向代理功能實現只保留gz文件。
# 能夠google"nginx gzip_static"瞭解更多後端

gzip_comp_level 4

# 默認值:1(建議選擇爲4)
# gzip壓縮比/壓縮級別,壓縮級別 1-9,級別越高壓縮率越大,固然壓縮時間也就越長(傳輸快但比較消耗cpu)。瀏覽器

gzip_buffers 4 16k

# 默認值: gzip_buffers 4 4k/8k
# 設置系統獲取幾個單位的緩存用於存儲gzip的壓縮結果數據流。 例如 4 4k 表明以4k爲單位,按照原始數據大小以4k爲單位的4倍申請內存。 4 8k 表明以8k爲單位,按照原始數據大小以8k爲單位的4倍申請內存。
# 若是沒有設置,默認值是申請跟原始數據相同大小的內存空間去存儲gzip壓縮結果。

gzip_types mime-type [mime-type ...]

# 默認值: gzip_types text/html (默認不對js/css文件進行壓縮)
# 壓縮類型,匹配MIME類型進行壓縮
# 不能用通配符 text/*
# (不管是否指定)text/html默認已經壓縮
# 設置哪壓縮種文本文件可參考 conf/mime.types

gzip_min_length  1k

# 默認值: 0 ,無論頁面多大都壓縮
# 設置容許壓縮的頁面最小字節數,頁面字節數從header頭中的Content-Length中進行獲取。
# 建議設置成大於1k的字節數,小於1k可能會越壓越大。 即: gzip_min_length 1024

gzip_http_version 1.0|1.1

# 默認值: gzip_http_version 1.1(就是說對HTTP/1.1協議的請求才會進行gzip壓縮)
# 識別http的協議版本。因爲早期的一些瀏覽器或者http客戶端,可能不支持gzip自解壓,用戶就會看到亂碼,因此作一些判斷仍是有必要的。
# 注:99.99%的瀏覽器基本上都支持gzip解壓了,因此能夠不用設這個值,保持系統默認便可。
# 假設咱們使用的是默認值1.1,若是咱們使用了proxy_pass進行反向代理,那麼nginx和後端的upstream server之間是用HTTP/1.0協議通訊的,若是咱們使用nginx經過反向代理作Cache Server,並且前端的nginx沒有開啓gzip,同時,咱們後端的nginx上沒有設置gzip_http_version爲1.0,那麼Cache的url將不會進行gzip壓縮

gzip_proxied [off|expired|no-cache|no-store|private|no_last_modified|no_etag|auth|any] ...

# 默認值:off
# Nginx做爲反向代理的時候啓用,開啓或者關閉後端服務器返回的結果,匹配的前提是後端服務器必需要返回包含"Via"的 header頭。
off - 關閉全部的代理結果數據的壓縮
expired - 啓用壓縮,若是header頭中包含 "Expires" 頭信息
no-cache - 啓用壓縮,若是header頭中包含 "Cache-Control:no-cache" 頭信息
no-store - 啓用壓縮,若是header頭中包含 "Cache-Control:no-store" 頭信息
private - 啓用壓縮,若是header頭中包含 "Cache-Control:private" 頭信息
no_last_modified - 啓用壓縮,若是header頭中不包含 "Last-Modified" 頭信息
no_etag - 啓用壓縮 ,若是header頭中不包含 "ETag" 頭信息
auth - 啓用壓縮 , 若是header頭中包含 "Authorization" 頭信息
any - 無條件啓用壓縮

gzip_vary on

# 和http頭有關係,加個vary頭,給代理服務器用的,有的瀏覽器支持壓縮,有的不支持,因此避免浪費不支持的也壓縮,因此根據客戶端的HTTP頭來判斷,是否須要壓縮

gzip_disable "MSIE [1-6]."

# 禁用IE6的gzip壓縮,又是由於杯具的IE6。固然,IE6目前依然普遍的存在,因此這裏你也能夠設置爲「MSIE [1-5].」
# IE6的某些版本對gzip的壓縮支持很很差,會形成頁面的假死,今天產品的同窗就測試出了這個問題
後來調試後,發現是對img進行gzip後形成IE6的假死,把對img的gzip壓縮去掉後就正常了
爲了確保其它的IE6版本不出問題,因此建議加上gzip_disable的設置

 

3. 使用curl測試

curl -I -H "Accept-Encoding: gzip, deflate" "http://www.slyar.com/blog/"

HTTP/1.1 200 OK
Server: nginx/1.0.15
Date: Sun, 26 Aug 2012 18:13:09 GMT
Content-Type: text/html; charset=UTF-8
Connection: keep-alive
X-Powered-By: PHP/5.2.17p1
X-Pingback: http://www.slyar.com/blog/xmlrpc.php
Content-Encoding: gzip

頁面成功壓縮

 

curl -I -H "Accept-Encoding: gzip, deflate" "http://www.slyar.com/blog/wp-content/plugins/photonic/include/css/photonic.css"

HTTP/1.1 200 OK
Server: nginx/1.0.15
Date: Sun, 26 Aug 2012 18:21:25 GMT
Content-Type: text/css
Last-Modified: Sun, 26 Aug 2012 15:17:07 GMT
Connection: keep-alive
Expires: Mon, 27 Aug 2012 06:21:25 GMT
Cache-Control: max-age=43200
Content-Encoding: gzip

css文件成功壓縮

curl -I -H "Accept-Encoding: gzip, deflate" "http://www.slyar.com/blog/wp-includes/js/jquery/jquery.js"

HTTP/1.1 200 OK
Server: nginx/1.0.15
Date: Sun, 26 Aug 2012 18:21:38 GMT
Content-Type: application/x-javascript
Last-Modified: Thu, 12 Jul 2012 17:42:45 GMT
Connection: keep-alive
Expires: Mon, 27 Aug 2012 06:21:38 GMT
Cache-Control: max-age=43200
Content-Encoding: gzip

js文件成功壓縮

curl -I -H "Accept-Encoding: gzip, deflate" "http://www.slyar.com/blog/wp-content/uploads/2012/08/2012-08-23_203542.png"

HTTP/1.1 200 OK
Server: nginx/1.0.15
Date: Sun, 26 Aug 2012 18:22:45 GMT
Content-Type: image/png
Last-Modified: Thu, 23 Aug 2012 13:50:53 GMT
Connection: keep-alive
Expires: Tue, 25 Sep 2012 18:22:45 GMT
Cache-Control: max-age=2592000
Content-Encoding: gzip

圖片成功壓縮

curl -I -H "Accept-Encoding: gzip, deflate" "http://www.slyar.com/blog/wp-content/plugins/wp-multicollinks/wp-multicollinks.css"

HTTP/1.1 200 OK
Server: nginx/1.0.15
Date: Sun, 26 Aug 2012 18:23:27 GMT
Content-Type: text/css
Content-Length: 180
Last-Modified: Sat, 02 May 2009 08:46:15 GMT
Connection: keep-alive
Expires: Mon, 27 Aug 2012 06:23:27 GMT
Cache-Control: max-age=43200
Accept-Ranges: bytes

最後來個不到1K的文件,因爲個人閾值是1K,因此沒壓縮
相關文章
相關標籤/搜索