一 Nginx靜態資源概述
1.1 靜態資源型別
Nginx作為靜態資源Web服務器部署配置, 傳輸非常高效, 常常用于靜態資源處理,請求以及動靜分離,通常非服務器動態運行生成的檔案屬于靜態資源,1.2 靜態資源場景
簡單靜態站點場景:
靜態站點加速場景:
二 靜態資源優化配置
2.1 sendfile
默認情況下,Nginx會自行處理檔案傳輸,并在發送之前將檔案復制到緩沖區中,啟用sendfile指令跳過了將資料復制到緩沖區的步驟,并允許將資料從一個檔案描述符直接復制到另一個檔案描述符,同時,為了防止一個快速連接完全占用作業行程,也可以使用sendfile_max_chunk指令限制單個sendfile()呼叫中傳輸的資料量, 語法:sendfile on | off; 默認:sendfile off; 可配置段:http,server,location,if in location 配置示例:1 location /mp3 { 2 #... 3 sendfile on; 4 sendfile_max_chunk 1m; 5 #... 6 }
2.2 tcp_nopush
將tcp_nopush指令與sendfile on;指令一起使用,可以使NGINX在sendfile()獲取資料塊之后立即在一個資料包中發送HTTP回應頭,即在sendfile開啟情況下,提高網路包的"傳輸效率", 語法:tcp_nopush on | off; 默認:tcp_nopush off; 可配置段:http, server, location 配置示例:1 location /mp3 { 2 #... 3 sendfile on; 4 tcp_nopush on; 5 #... 6 }
2.3 tcp_nodelay
tcp_nodelay指令允許覆寫Nagle的演算法,該演算法最初設計用于解決慢速網路中小資料包的問題,該演算法將許多小資料包合并為一個較大的資料包,并以200毫秒的延遲發送資料包,如今,在提供大型靜態檔案時,無論資料包大小如何,都可以立即發送資料,延遲也會影響在線應用程式(ssh,在線游戲,在線交易等),默認情況下,tcp_nodelay指令設定為on,這意味著禁用了Nagle的演算法,此指令僅用于keepalive連接,因此tcp_nodelay提高網路包的"實時性", 語法:tcp_nodelay on | off; 默認:tcp_nodelay on; 可配置段:http, server, location 配置示例:1 location /mp3 { 2 #... 3 tcp_nodelay on; 4 keepalive_timeout 65; 5 #... 6 }
三 靜態資源壓縮選項
3.1 gzip壓縮配置
Nginx將回應報文發送至客戶端之前可以啟用壓縮功能,這能夠有效地節約帶寬,并提高回應至客戶端的速度, 語法:gzip on | off; 默認值:gzip off; 可配置段:http, server, location, if in location 配置示例:1 location /mp3 { 2 #... 3 gzip on; 4 #... 5 }
3.2 gzip壓縮比配置
語法:gzip_comp_level level; 默認值:gzip_comp_level 1; 可配置段:http, server, location 配置示例:1 location /mp3 { 2 #... 3 gzip on; 4 gzip_comp_level 6; 5 #... 6 }提示:
- 過高的壓縮比比較耗費服務端性能,
- 隨著壓縮級別的升高,壓縮比有所提高,但到了級別6后,很難再提高;
- 隨著壓縮級別的升高,處理時間明顯變慢;
- gzip很消耗cpu的性能,高并發情況下cpu達到100%,
3.3 gzip壓縮協議版本配置
語法:gzip_http_version 1.0 | 1.1; 默認值:gzip_http_version 1.1; 可配置段:http, server, location 配置示例:1 location /mp3 { 2 #... 3 gzip on; 4 gzip_comp_level 6; 5 gzip_http_version 1.1; 6 #... 7 }提示:也可不設定,目前主流幾乎都是v1.1版本協議,
3.4 gzip預壓縮配置
Nginx的動態壓縮是對每個請求先壓縮再輸出,會造成服務端一定程度的CPU消耗,因此可以利用nginx模塊Gzip Precompression模塊,同時nginx默認安裝ngx_http_gzip_module,采用的是chunked方式的動態壓縮,靜態壓縮需要使用http_gzip_static_module模塊,進行pre-compress,對需要壓縮的檔案,直接讀取已經壓縮好的檔案(檔案名為加.gz),而不是動態壓縮,對于不支持gzip的請求則讀取原檔案,即預壓縮, 語法:gzip_static on | off | always; 默認值:gzip_static off; 可配置段:http, server, location 配置示例:1 location /mp3 { 2 #... 3 gzip_static on; 4 gzip_proxied expired no-cache no-store private auth; 5 #.. 6 }注意: 檔案可以使用gzip命令來進行壓縮,或任何其他兼容的命令,建議壓縮檔案和原始檔案的修改日期和時間保持一致, gzip_static配置優先級高于gzip, 開啟nginx_static后,對于任何檔案都會先查找是否有對應的gz檔案, gzip_types設定對gzip_static無效, gzip static默認適用HTTP 1.1,
3.5 gzip_buffers壓碩訓沖配置
設定系統獲取幾個單位的快取用于存盤gzip的壓縮結果資料流,如果沒有設定,默認值是申請跟原始資料相同大小的記憶體空間去存盤gzip壓縮結果, 語法:gzip_buffers number size; 默認值:gzip_buffers 32 4k|16 8k; 可配置段:http, server, location 配置示例:1 location /mp3 { 2 #... 3 gzip_buffers 32 4k 4 #... 5 }示例解釋:如上32 4K表示按照記憶體頁(one memory page)大小以4K為單位(即一個系統中記憶體頁為4K),申請32倍的記憶體空間,
3.6 gzip_disable例外配置
針對特定的情況,排除在壓縮之外,即不壓縮, 語法:gzip_disable regex ...; 可配置段:http, server, location 配置示例:1 location /mp3 { 2 #... 3 gzip on; 4 gzip_buffers 4 16k; 5 gzip_comp_level 2; 6 gzip_disable "MSIE [1-6]\."; 7 #... 8 }示例釋義:關閉IE6及以下的瀏覽器壓縮,
3.7 gzip_min_length特定的大小壓縮配置
當回傳內容大于此值時才會使用gzip進行壓縮,單位為位元組,當值為0時,所有頁面都進行壓縮, 語法:gzip_min_length length; 默認值:gzip_min_length 20; 可配置段:http, server, location 配置示例:1 location /mp3 { 2 #... 3 gzip on; 4 gzip_buffers 4 16k; 5 gzip_min_length 1k; 6 gzip_comp_level 2; 7 gzip_disable "MSIE [1-6]\."; 8 #... 9 }
3.8 gzip_types壓縮型別配置
語法:gzip_types mime-type ...; 默認值:gzip_types text/html; 可配置段:http, server, location1 location /myhome { 2 #... 3 gzip on; 4 gzip_min_length 1k; 5 gzip_buffers 4 16k; 6 gzip_comp_level 2; 7 gzip_types text/plain application/x-javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png; 8 gzip_disable "MSIE [1-6]\."; 9 #... 10 }
3.9 gzip_proxied反向代理壓縮配置
Nginx作為反向代理的時候啟用,開啟或者關閉后端服務器回傳的結果,匹配的前提是后端服務器必須要回傳包含"Via"的header頭, 語法:gzip_proxied off | expired | no-cache | no-store | private | no_last_modified | no_etag | auth | any ...; 默認值:gzip_proxied off; 可配置段:http, server, location 引數釋義:- 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:無條件啟用壓縮,
四 靜態資源壓縮配置
4.1 創建站點目錄
[root@nginx ~]# mkdir /usr/share/nginx/gzip/ 上傳用于測驗的html、png、css等檔案,提前查看檔案大小,
4.2 配置虛擬主機
1 [root@nginx ~]# vi /etc/nginx/conf.d/gzip.conf 2 server { 3 listen 80; 4 server_name gzip.linuxds.com; 5 sendfile on; 6 access_log /var/log/nginx/gzip.access.log main; 7 error_log /var/log/nginx/gzip.error.log warn; 8 location / { 9 root /usr/share/nginx/gzip; 10 index index.html; 11 12 gzip on; 13 gzip_min_length 1k; 14 gzip_buffers 4 16k; 15 gzip_http_version 1.1; 16 gzip_comp_level 2; 17 gzip_disable "MSIE [1-6]\."; 18 gzip_types text/plain application/json application/x-javascript application/javascript text/css application/css application/xml application/xml+rss text/javascript application/x-httpd-php image/jpeg image/gif imag 19 e/png; 20 } 21 }
1 [root@nginx ~]# nginx -t -c /etc/nginx/nginx.conf #檢查組態檔 2 [root@nginx ~]# nginx -s reload #多載組態檔
4.3 確認驗證
使用curl測驗站點是否啟用gzip:1 [root@imxhy ~]# curl -I -H "Accept-Encoding: gzip, deflate" "http://gzip.linuxds.com/css/test.css" 2 [root@imxhy ~]# curl -I -H "Accept-Encoding: gzip, deflate" "http://gzip.linuxds.com/images/test.jpeg" 3 [root@imxhy ~]# curl -I -H "Accept-Encoding: gzip, deflate" "http://gzip.linuxds.com/js/test.js"
也可通過chrome瀏覽器,開啟F12開發者模式后訪問:http://gzip.linuxds.com/css/test.css
提示:同時可通過將gzip_min_length設定為500k再進行觀察,可知只有test.png和test.js,兩個大于500k的檔案才會被壓縮,css不會進行壓縮,
參考:https://www.cnblogs.com/xzkzzz/p/9224358.html
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/36155.html
標籤:Linux
上一篇:linux系統出問題了
