首頁  >  文章  >  後端開發  >  Nginx作為靜態資源web服務並進行靜態資源壓縮

Nginx作為靜態資源web服務並進行靜態資源壓縮

不言
不言原創
2018-08-06 11:36:562924瀏覽

這篇文章要跟大家介紹的內容是關於 Nginx作為靜態資源web服務並進行靜態資源壓縮,有一定的參考價值,有需要的朋友可以參考一下,希望對你有所幫助。

一、靜態資源web服務

Nginx作為靜態資源web服務並進行靜態資源壓縮

1.靜態資源類型

##瀏覽器端渲染HTML、CSS、JS圖片JEPG、GIF、PNG#視頻FLV、MPEG檔案TXT等其他下載檔案

2. 靜態資源服務場景-CDN

Nginx作為靜態資源web服務並進行靜態資源壓縮

#二、靜態資源核心配置

1. 檔案讀取sendfile

sendfile 是高效傳輸檔案的模式.
sendfile設定為on表示啟動高效傳輸檔案的模式。 sendfile可以讓Nginx在傳輸檔案時直接在磁碟和tcp socket之間傳輸資料。如果這個參數不開啟,會先在用戶空間(Nginx進程空間)申請一個buffer,用read函數把資料從磁碟讀到cache,再從cache讀取到用戶空間的buffer,再用write函數把資料從用戶空間的buffer寫入到內核的buffer,最後到tcp socket。開啟這個參數後可以讓資料不用經過用戶buffer。

Nginx作為靜態資源web服務並進行靜態資源壓縮

Nginx作為靜態資源web服務並進行靜態資源壓縮

語法

Syntax:        sendfile on | off;
Default:    sendfile off;
Context:    http, server, location, if in location

2. tcp_nopush

在sendfile 開啟的情況下,提升網路封包的傳輸效率。
tcp_nopush指令,在連接套接字時啟用Linux系統下的TCP_CORK。此選項告訴TCP堆疊附加資料包,並在它們已滿或當應用程式透過明確刪除TCP_CORK指示發送資料包時發送它們。這使得發送的資料分組是最優量,並且因此提高了網路資料包的傳輸效率。
也就是說 tcp_nopush=on 時,結果就是封包不會馬上傳送出去,等到封包最大時,一次性的傳輸出去,這樣有助於解決網路堵塞,雖然有一點點延遲。

語法

Syntax:        tcp_nopush on | off;
Default:    tcp_nopush off;
Context:    http, server, location

3. tcp_nodelay

在 keepalive 連線下,提高網路封包的傳輸即時性。
tcp_nodelay選項和tcp_nopush正好相反,封包不等待,即時發送給使用者。

語法

Syntax:        tcp_nodelay on | off;
Default:    tcp_nodelay off;
Context:    server, location

4. 壓縮

#開啟壓縮,可以加快資源回應速度,同時節省網路頻寬資源。

Nginx作為靜態資源web服務並進行靜態資源壓縮

ngx_http_gzip_module

語法

開啟關閉壓縮

Syntax:        gzip on | off;
Default:    gzip off;
Context:    http, server, location, if in location

壓縮等級配置(壓縮等級越高,越消耗伺服器資源)

Syntax:    gzip_comp_level level;
Default:    gzip_comp_level 1;
Context:    http, server, location

gzip協定版本設定

Syntax:    gzip_http_version 1.0 | 1.1;
Default:    gzip_http_version 1.1;
Context:    http, server, location

#壓縮擴充模組

預讀gzip功能ngx_http_gzip_static_module

Syntax:    gzip_static on | off | always;
Default:    gzip_static off;
Context:    http, server, location
應用支援gunzip的壓縮方式ngx_http_gunzip_module
Syntax:    gunzip on | off;
Default:    gunzip off;
Context:    http, server, location

Syntax:    gunzip_buffers number size;
Default:    gunzip_buffers 32 4k|16 8k;
Context:    http, server, location

#
server {
    #开启sendfile,提高网络包的传输效率
    sendfile on;

    #配置txt|xml资源的路径
    location ~ .*\.(txt|xml)$ {
        #开启压缩
        gzip on;
        gzip_http_version 1.1;
        gzip_comp_level 1;
        gzip_types text/plain application/xml;
        root /vagrant/doc;
    }
}

##1. vim /etc/nginx/conf.d/static.conf

#

[root/etc/nginx]# curl http://www.sina.com.cn/ > /vagrant/doc/a.txt
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  557k  100  557k    0     0   488k      0  0:00:01  0:00:01 --:--:--  488k

[root/etc/nginx]# ll /vagrant/doc/a.txt
-rwxrwxrwx 1 vagrant vagrant 558K 7月  11 10:57 /vagrant/doc/a.txt*
2. nginx -s reload 重新載入nginx設定檔

Nginx作為靜態資源web服務並進行靜態資源壓縮3. 建立/vagrant/doc/a.txt 文件,並檢視檔案大小

[root/etc/nginx]# curl -I 192.168.33.88/a.txt -H Accept-Encoding:gzip,defalte
HTTP/1.1 200 OK
Server: nginx/1.14.0
Date: Wed, 11 Jul 2018 11:01:43 GMT
Content-Type: text/plain
Last-Modified: Wed, 11 Jul 2018 10:57:22 GMT
Connection: keep-alive
ETag: W/"5b45e292-8b47f"
Content-Encoding: gzip

可見,a.txt 檔案大小為558K

#4. 透過curl存取192.168.33.88/a.txt,查看http回應頭資訊

[root/etc/nginx]# tail /var/log/nginx/access.log
192.168.33.1 - - [11/Jul/2018:11:02:46 +0000] "GET /a.txt HTTP/1.1" 200 151549 "-" "Chrome/67.0.3396.99" "-"

從回應頭資訊可看出伺服器使用了gzip壓縮

5. 透過瀏覽器存取192.168.33.88/a.txt,使用開發者工具檢視請求檔案的大小


可見,經過gzip壓縮,請求檔案由558K被壓縮到148K,壓縮比例很高。

6. 另外還可以透過nginx的access.log日誌查看傳輸檔案的大小rrreee

可看出傳輸檔案大小為151549,單位是B,換算成KB約148KB。 ######相關推薦:#########nginx start error nginx反向代理nginx是什麼nginx重###############Nginx安裝lua-nginx -module模組###############Linux下建立nginx腳本-start、stop、reload…,nginx-start_PHP教學######
類型 檔案類型

以上是Nginx作為靜態資源web服務並進行靜態資源壓縮的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn