【nginx網站性能優化篇(1)】gzip壓縮與expire瀏覽器緩存

gzip壓縮

概述

網頁在服務器端通過了gzip或者其餘格式的壓縮後的輸出明顯減小了content-length字節,當訪問過百萬時,這些減小的字節就會變爲客觀的流量給節約下來;從而減輕服務器的壓力以及網頁的訪問速度;javascript

原理

客戶端在向服務端發送http請求時,在請求頭中有一個Accept-Encoding的頭信息,該頭信息告知服務器端本客服端能接收什麼樣的壓縮文件,若是服務器端配置了壓縮的需求,就會返回相應的壓縮文件,而後瀏覽器再解碼呈現出來;咱們在作採集時,須要採集的是未壓縮的文件,因此在http請求頭上不要包含Accept-Encoding的鍵;php

經過這個原理在php給app寫接口時,可作一些安全方面的處理,具體如何實現,期待和有經驗的app開發人員一塊兒研究.

Nginx的壓縮

在http段添加以下配置css

gzip on|off;  #是否開啓gzip
gzip_buffers 32 4K| 16 8K #緩衝(壓縮在內存中緩衝幾塊? 每塊多大?)
gzip_comp_level [1-9] #推薦6 壓縮級別(級別越高,壓的越小,越浪費CPU計算資源)
gzip_disable #正則匹配UA 什麼樣的Uri不進行gzip
gzip_min_length 200 # 開始壓縮的最小長度(再小就不要壓縮了,意義不在)
gzip_http_version 1.0|1.1 # 開始壓縮的http協議版本(能夠不設置,目前幾乎全是1.1協議)
gzip_proxied          # 設置請求者代理服務器,該如何緩存內容
gzip_types text/plain  application/xml # 對哪些類型的文件用壓縮 如txt,xml,html ,css
gzip_vary on|off  # 是否傳輸gzip壓縮標誌

Examplehtml

gzip on;
gzip_min_length  1k;
gzip_buffers     4 16k;
gzip_http_version 1.1;
gzip_comp_level 2;
gzip_types     text/plain application/javascript application/x-javascript text/javascript text/css application/xml application/xml+rss;
gzip_vary on;
gzip_proxied   expired no-cache no-store private auth;
gzip_disable   "MSIE [1-6]\.";

注意:java

  1. 圖片/mp3這樣的二進制文件,沒必要壓縮,由於壓縮率比較小, 好比100->80字節,並且壓縮也是耗費CPU資源的.
  2. 比較小的文件沒必要壓縮,意義不存在.

expire瀏覽器緩存設置

概述

這裏的緩存控制主要是針對圖片,css,js等變化週期較短的靜態文件;以圖片爲例,當咱們第一次訪問這張圖片時,服務器返回的是200,同時在響應頭返回了兩個鍵,Etag:即該文件的'指紋'(惟一標識)以及Last-Modified:'文件的修改時間';此時瀏覽器,以及其餘的緩存服務器就會把這張圖片給緩存起來;再次請求這張圖片時,請求頭增長了兩個鍵值,If-Modified-Since:上次發生改變的時間;If-None-Match:上次文件自己的Etag值,服務器根據這兩個鍵值判斷其Etag和Last-Modified,若是都沒發生改變就不返回這張圖片,只返回一個304的狀態碼,服務器接收到這個304的狀態碼就會本身去從緩存裏面找這個被緩存的圖片;
這樣就減小了服務器的帶寬壓力以及提高了網站訪問速度;瀏覽器

配置

在location段以及if段能夠設置緩存

location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
{
    expires      30d;
}

location ~ .*\.(js|css)?$
{
    expires      12h;
}

格式安全

expires 30s;
expires 30m;
expires 2h;
expires 30d;

注意:服務器的日期要準確,若是服務器的日期落後於實際日期,可能致使緩存失效服務器

相關文章
相關標籤/搜索