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

來源:互聯網
上載者:User
這篇文章給大家介紹的內容是關於 Nginx作為靜態資源web服務並進行靜態資源壓縮,有一定的參考價值,有需要的朋友可以參考一下,希望對你有所協助。

一、靜態資源web服務

1. 靜態資源類型

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

2. 靜態資源服務情境-CDN

二、靜態資源核心配置

1. 檔案讀取 sendfile

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


文法

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. 壓縮

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

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, locationSyntax:    gunzip_buffers number size;Default:    gunzip_buffers 32 4k|16 8k;Context:    http, server, location

三、靜態資源壓縮執行個體

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

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;    }}

2. nginx -s reload 重新載入nginx設定檔

3. 建立 /vagrant/doc/a.txt 檔案,並查看檔案大小

[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  Speed100  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*

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

4. 通過curl訪問 192.168.33.88/a.txt,查看http回應標頭資訊

[root/etc/nginx]# curl -I 192.168.33.88/a.txt -H Accept-Encoding:gzip,defalteHTTP/1.1 200 OKServer: nginx/1.14.0Date: Wed, 11 Jul 2018 11:01:43 GMTContent-Type: text/plainLast-Modified: Wed, 11 Jul 2018 10:57:22 GMTConnection: keep-aliveETag: W/"5b45e292-8b47f"Content-Encoding: gzip

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

5. 通過瀏覽器訪問 192.168.33.88/a.txt,使用開發人員工具查看請求檔案的大小

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

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

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

可看出傳輸檔案大小為 151549,單位是B,換算成KB約為148KB。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.