一 Nginx靜態資源概述
1.1 靜態資源類型
Nginx做爲靜態資源Web服務器部署配置, 傳輸很是高效, 經常用於靜態資源處理,請求以及動靜分離。一般非服務器動態運行生成的文件屬於靜態資源。
類型
|
種類
|
瀏覽器端渲染
|
HTML、CSS、JS
|
圖片
|
JPEG、GIF、PNG
|
視頻
|
FLV、MP4
|
文件
|
TXT及其餘類型文件
|
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, location
1 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