008.Nginx靜態資源

来源:https://www.cnblogs.com/itzgr/archive/2020/07/13/13295013.html
-Advertisement-
Play Games

一 Nginx靜態資源概述 1.1 靜態資源類型 Nginx作為靜態資源Web伺服器部署配置, 傳輸非常高效, 常常用於靜態資源處理,請求以及動靜分離。通常非伺服器動態運行生成的文件屬於靜態資源。 類型 種類 瀏覽器端渲染 HTML、CSS、JS 圖片 JPEG、GIF、PNG 視頻 FLV、MP4 ...


一 Nginx靜態資源概述

1.1 靜態資源類型

Nginx作為靜態資源Web伺服器部署配置, 傳輸非常高效, 常常用於靜態資源處理,請求以及動靜分離。通常非伺服器動態運行生成的文件屬於靜態資源。
類型 種類
瀏覽器端渲染 HTML、CSS、JS
圖片 JPEG、GIF、PNG
視頻 FLV、MP4
文件 TXT及其他類型文件

1.2 靜態資源場景

簡單靜態站點場景: clipboard 靜態站點加速場景: clipboard

二 靜態資源優化配置

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等文件,提前查看文件大小。 clipboard

    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"
    clipboard 也可通過chrome瀏覽器,開啟F12開發者模式後訪問:http://gzip.linuxds.com/css/test.css clipboard 提示:同時可通過將gzip_min_length設置為500k再進行觀察,可知只有test.png和test.js,兩個大於500k的文件才會被壓縮,css不會進行壓縮。 clipboard 參考:https://www.cnblogs.com/xzkzzz/p/9224358.html
    您的分享是我們最大的動力!

    -Advertisement-
    Play Games
    更多相關文章
    • 同步和非同步,阻塞和非阻塞是大家經常會聽到的概念,但是它們是從不同維度來描述一件事情,常常很容易混為一談。 ##1. 同步和非同步 同步和非同步描述的是消息通信的機制。 ###同步 當一個request發送出去以後,會得到一個response,這整個過程就是一個同步調用的過程。哪怕response為空,或 ...
    • 在WinForm程式中,實現TextBox文本輸入框占位符的方式也很多,最常用的是方式基於Windows Api SendMessage函數發送EM_SETCUEBANNER消息,或者通過TextBox自帶的焦點事件處理。 ###SendMessage函數實現 創建一個繼承TextBox的ZhmTe ...
    • 本系列將和大家分享面向對象23種設計模式中常用的幾種設計模式,本章主要簡單介紹下創建型設計模式。 ...
    • 隨著markdown格式筆記的流行,現在很多程式員都開始使用markdown來編輯自己的博客.然而,博客園的markdown格式編輯器使用體驗真的一言難盡.不過幸好,在網上找到某個大神分享的VSCode擴展,這個擴展支持VSCode本地編寫博客並直接在博客園上保存博客草稿,非常的方便. ...
    • 設計模式中的那些工廠 Intro 設計模式中有幾個工廠模式,聊一聊這幾個工廠模式的各自用法和使用示例,工廠模式包含簡單工廠,抽象工廠,工廠方法,這些均屬於創建型模式, 所謂創建型模式,就是說這幾個設計模式是用來創建對象的。 簡單工廠 首先來說一說,最簡單的簡單工廠 簡單工廠模式是由一個工廠對象決定創 ...
    • 理解XAML XAML(extensible application markup language)發音為“zammel”,是用於實例化.net對象的標記語言。 XAML扮演的角色 對於WPF應用XAML不是必須的,編程人員可以在後端直接編寫代碼構建界面 基於XAML可以單獨實現在前臺編寫UI的功 ...
    • 之前實現了NetCore實現自定義IOC容器註入,在Controller使用事物的過程中思考是否能夠像Spring一樣通過自定義註解實現事物管理,思路圖如下 事物的動作拆分只需要根據當前執行線程劃分Connection對象並開啟事物即可,重點是在Emit代碼織入過程中對異常捕捉的處理 處理過程中主要 ...
    • 在 Linux 中,有非常多的命令可以讓我們用來執行各種各樣的任務。當我們想要像使用文件瀏覽器一樣列出一個目錄下的內容時,大家第一時間想到的是 ls 命令。但只有 ls 命令能實現這個目的嗎?顯然不是。 下麵,良許就給大家介紹Linux下列出目錄內容的一些命令,一起來看看吧。 ls Linux 中最 ...
    一周排行
      -Advertisement-
      Play Games
    • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
    • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
    • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
    • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
    • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
    • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
    • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
    • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
    • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
    • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...