## gzip壓縮
### 概述
網頁在服務器端經過了gzip或者其他格式的壓縮后的輸出明顯減少了content-length字節,當訪問過百萬時,這些減少的字節就會變為客觀的流量給節約下來;從而減輕服務器的壓力以及網頁的訪問速度;
### 原理
客戶端在向服務端發送http請求時,在請求頭中有一個Accept-Encoding的頭信息,該頭信息告知服務器端本客服端能接收什么樣的壓縮文件,如果服務器端配置了壓縮的需求,就會返回相應的壓縮文件,然后瀏覽器再解碼呈現出來;我們在做采集時,需要采集的是未壓縮的文件,所以在http請求頭上不要包含Accept-Encoding的鍵;
> 通過這個原理在php給app寫接口時,可做一些安全方面的處理,具體如何實現,期待和有經驗的app開發人員一起研究.
### Nginx的壓縮
在http段添加如下配置
```
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壓縮標志
```
**Example**
```
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]\.";
```
**注意:**
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;
**注意:服務器的日期要準確,如果服務器的日期落后于實際日期,可能導致緩存失效**
- Apache
- 【Apache運維基礎(1)】Apache的安裝與使用
- 【Apache運維基礎(2)】主配置文件說明
- 【Apache運維基礎(3)】虛擬主機配置說明
- 【Apache運維基礎(4)】Apache的Rewrite攻略(1)
- 【Apache運維基礎(5)】Apache的Rewrite攻略(2).htaccess文件
- 【Apache運維基礎(6)】Apache的日志管理與分析
- 工具篇
- supervisor進程管理器
- Haproxy安裝與配置
- Nginx
- 【nginx網站性能優化篇(1)】gzip壓縮與expire瀏覽器緩存
- 【nginx網站性能優化篇(2)】反向代理實現Apache與Nginx的動靜分離(LNMPA)
- 【nginx網站性能優化篇(3)】反向代理實現負載均衡
- 【nginx網站性能優化篇(4)】理解nginx的高并發原理及其配置調優
- 【nginx運維基礎(1)】Nginx的編譯安裝與使用
- 【nginx運維基礎(2)】Nginx的配置文件說明及虛擬主機配置示例
- 【nginx運維基礎(3)】Nginx的編譯PHP
- 【nginx運維基礎(4)】Nginx的日志管理(日志格式與定時分割日志)
- 【nginx運維基礎(5)】Nginx的location攻略
- 【nginx運維基礎(6)】Nginx的Rewrite語法詳解
- 【nginx運維基礎(7)】配置SSL支持https訪問
- 【nginx運維基礎(8)】配置支持http2協議
- 【nginx運維基礎(9)】了解PHP-FPM 與 Nginx 的通信機制
- 其它
- Apache與Nginx下php隱藏http頭部版本信息的實現方法
- CURL與PHP-CLI的應用【CLI篇】
- CURL與PHP-CLI的應用【Curl篇】
- Linux之SAMBA共享服務
- 【Linux常識篇(1)】所謂的正向代理與反向代理
- 【Linux常識篇(2)】理解inode
- 【Linux常識篇(3)】文件及文件夾的ctime atime mtime的含義詳解
- centOS使用手記
- 服務器日志分析
- 高頻命令
- df
- mv
- gzip
- cp
- tar
- touch
- cat
- uniq
- nl
- more
- rmdir
- less
- mkdir
- head
- rm
- tail
- 五大查詢命令
- vi&vim
- ls與目錄結構
- grep
- awk
- sed
- 其他高頻命令