Nginx R31 doc-09-Serving Static Content 靜態內容

提供靜態內容

配置 NGINX 和 NGINX Plus 以提供靜態內容,使用類型特定的根目錄,檢查文件存在性,并進行性能優化。

本節介紹如何配置 NGINX 和 NGINX Plus 以提供靜態內容,如何定義搜索請求文件的路徑,如何設置索引文件,以及如何調整 NGINX 和 NGINX Plus 以及內核以實現最佳性能。

根目錄和索引文件

root 指令指定將用于搜索文件的根目錄。為了獲得請求文件的路徑,NGINX 將請求 URI 追加到 root 指令指定的路徑中。該指令可以放置在 http {}、server {} 或 location {} 上下文中的任何級別。在下面的示例中,root 指令為虛擬服務器定義了根目錄。它適用于所有未在 location {} 塊中明確重新定義根目錄的地方:

server {root /www/data;location / {}location /images/ {}location ~ \.(mp3|mp4) {root /www/media;}
}

在這里,NGINX 在文件系統中的 /www/data/images/ 目錄中搜索以 /images/ 開頭的 URI。但是,如果 URI 以 .mp3 或 .mp4 擴展名結尾,NGINX 將在匹配的 location 塊中定義的 /www/media/ 目錄中搜索文件。

如果請求以斜杠結尾,則 NGINX 將其視為對目錄的請求,并嘗試在目錄中查找索引文件。index 指令定義了索引文件的名稱(默認值為 index.html)。繼續上面的示例,如果請求 URI 是 /images/some/path/,并且如果存在 /www/data/images/some/path/index.html,則 NGINX 將返回該文件。如果不存在,則 NGINX 默認返回 HTTP 404(未找到)。要配置 NGINX 返回自動生成的目錄列表,可以將 on 參數包含在 autoindex 指令中:

location /images/ {autoindex on;
}

您可以在 index 指令中列出多個文件名。NGINX 按指定的順序搜索文件,并返回它找到的第一個文件。

location / {index index.$geo.html index.htm index.html;
}

此處使用的 $geo 變量是通過 geo 指令設置的自定義變量。該變量的值取決于客戶端的 IP 地址。

要返回索引文件,NGINX 檢查其是否存在,然后進行內部重定向,將索引文件的名稱追加到基本 URI 中以獲取新的 URI。內部重定向導致對位置的新搜索,可能會進入另一個位置,如下面的示例所示:

location / {root /data;index index.html index.php;
}location ~ \.php {fastcgi_pass localhost:8000;#...
}

在這里,如果請求中的 URI 是 /path/,并且 /data/path/index.html 不存在但 /data/path/index.php 存在,則對 /path/index.php 的內部重定向被映射到第二個位置。結果,請求被代理。

嘗試多個選項

try_files 指令可以用于檢查指定的文件或目錄是否存在;如果存在,則 NGINX 進行內部重定向,如果不存在,則返回指定的狀態碼。

例如,要檢查請求 URI 對應的文件是否存在,可以使用 try_files 指令和 $uri 變量,如下所示:

server {root /www/data;location /images/ {try_files $uri /images/default.gif;}
}

文件以 URI 的形式指定,使用當前位置或虛擬服務器上下文中設置的 root 或 alias 指令進行處理。在這種情況下,如果原始 URI 對應的文件不存在,NGINX 將內部重定向到最后一個參數指定的 URI,并返回 /www/data/images/default.gif。

最后一個參數也可以是狀態碼(直接在等號之前)或位置的名稱。在以下示例中,如果 try_files 指令的參數都不能解析為現有文件或目錄,則返回 404 錯誤。

location / {try_files $uri $uri/ $uri.html =404;
}

在下一個示例中,如果原始 URI 和附加的尾部斜杠的 URI 都不能解析為現有文件或目錄,則將請求重定向到命名位置,該位置將請求傳遞給代理服務器。

location / {try_files $uri $uri/ @backend;
}location @backend {proxy_pass http://backend.example.com;
}

要了解更多信息,請觀看“內容緩存”網絡研討會,了解如何顯著提高網站的性能,并深入了解 NGINX 的緩存功能。

優化性能以提供內容

加載速度是提供任何內容的關鍵因素。對 NGINX 配置進行微小優化可能會提高生產力并幫助達到最佳性能。

啟用 sendfile

默認情況下,NGINX 自己處理文件傳輸,并在發送之前將文件復制到緩沖區中。啟用 sendfile 指令可消除將數據復制到緩沖區的步驟,并啟用直接從一個文件描述符復制數據到另一個文件描述符。或者,為了防止一個快速連接完全占據工作進程,您可以使用 sendfile_max_chunk 指令來限制在單個 sendfile() 調用中傳輸的數據量(在此示例中,限制為 1 MB):

location /mp3 {sendfile           on;sendfile_max_chunk 1m;#...
}

啟用 tcp_nopush

將 tcp_nopush 指令與 sendfile on; 指令一起使用。這使得 NGINX 在通過 sendfile() 獲取數據塊后立即將 HTTP 響應頭部發送在一個數據包中。

location /mp3 {sendfile   on;tcp_nopush on;#...
}

啟用 tcp_nodelay

tcp_nodelay 指令允許覆蓋 Nagle 算法,最初設計用于解決慢速網絡中的小數據包問題。該算法將多個小數據包合并成一個較大的數據包,并在延遲 200 毫秒后發送數據包。如今,在提供大型靜態文件時,無論數據包大小如何,數據都可以立即發送。延遲還會影響在線應用(ssh、在線游戲、在線交易等)。默認情況下,tcp_nodelay 指令設置為開啟,這意味著 Nagle 算法已禁用。僅對保持活動的連接使用此指令:

location /mp3  {tcp_nodelay       on;keepalive_timeout 65;#...
}

優化后臺隊列

重要因素之一是 NGINX 處理傳入連接的速度。一般規則是,當建立連接時,它被放入“監聽”套接字的“監聽”隊列中。在正常負載下,要么隊列很小,要么根本沒有隊列。但在高負載下,隊列可能會急劇增長,導致性能不均勻、連接丟失和延遲增加。

顯示監聽隊列

要顯示當前的監聽隊列,請運行以下命令:

netstat -Lan

輸出可能如下,其中顯示在端口 80 的監聽隊列中有 10 個未接受的連接,而配置的最大值為 128 個排隊連接。這種情況是正常的。

當前的監聽隊列大小(qlen/incqlen/maxqlen)
監聽           本地地址
0/0/128        *.12345
10/0/128        *.80
0/0/128        *.8080

相比之下,在以下命令中,未接受的連接數量(192)超過了 128 的限制。當網站經歷大量流量時,這種情況很常見。為了達到最佳性能,您需要增加可以排隊等待 NGINX 接受的連接的最大數量,方法是在操作系統和 NGINX 配置中都增加此值。

當前的監聽隊列大小(qlen/incqlen/maxqlen)
監聽           本地地址
0/0/128        *.12345
192/0/128        *.80
0/0/128        *.8080
調整操作系統

將 net.core.somaxconn 內核參數的值從默認值(128)增加到足夠大以處理大量流量的值。

在此示例中,將其增加到 4096。

對于 FreeBSD,運行以下命令:

sudo sysctl kern.ipc.somaxconn=4096

對于 Linux:

運行以下命令:

sudo sysctl -w net.core.somaxconn=4096

使用文本編輯器將以下行添加到 /etc/sysctl.conf:

net.core.somaxconn = 4096
調整 NGINX

如果將 somaxconn 內核參數設置為大于 512 的值,請將 backlog 參數更改為 NGINX listen 指令以匹配:

server {listen 80 backlog=4096;# ...
}

nginx 系列

Nginx-01-聊一聊 nginx

Nginx-01-Nginx 是什么

Nginx-02-為什么使用 Nginx

Nginx-02-Nginx Ubuntu 安裝 + windows10 + WSL ubuntu 安裝 nginx 實戰筆記

Nginx-02-基本使用

Nginx-03-Nginx 項目架構

Nginx-04-Docker Nginx

Nginx-05-nginx 反向代理是什么?windows 下如何配置使用 nginx

Nginx-06-nginx 匯總入門介紹

Nginx R31 doc 官方文檔-01-nginx 如何安裝

Nginx R31 doc-02-nginx 基本功能

Nginx R31 doc-03-HTTP Load Balancing HTTP 負載均衡

Nginx R31 doc-04-HTTP Health Checks

Nginx R31 doc-05-Dynamic Configuration of Upstreams with the NGINX Plus API 使用 NGINX Plus API 動態配置上游服務器

Nginx R31 doc-06-Accepting the PROXY Protocol

Nginx R31 doc-07-內容緩存

Nginx R31 doc-08-Configuring NGINX and NGINX Plus as a Web Server 配置 NGINX 和 NGINX Plus 作為 Web 服務器

Nginx R31 doc-09-Serving Static Content 靜態內容

Nginx R31 doc-10-NGINX Reverse Proxy 反向代理

Nginx R31 doc-11-Compression and Decompression 壓縮與解壓縮

Nginx R31 doc-12-NGINX SSL Termination 安全加密

Nginx R31 doc-13-Limiting Access to Proxied HTTP Resources 訪問限流

Nginx R31 doc-14-Dynamic Denylisting of IP Addresses 動態拒絕IP地址

Nginx R31 doc-15-Live Activity Monitoring 實時活動監控

Nginx R31 doc-16-logging 配置日志

Nginx R31 doc-17-debugging 調試

Nginx R31 doc-18-High Availability Support for NGINX Plus in On-Premises Deployments

Nginx 實戰-01-nginx ubuntu 安裝筆記

Nginx 實戰-01-nginx windows 安裝筆記

Nginx 實戰-02-nginx proxy_pass 服務代理訪問 使用筆記 ubuntu nodejs

Nginx 實戰-03-nginx 負載均衡

Nginx 實戰-04-nginx 不同的地址訪問不同的服務

Nginx 實戰-05-nginx 反向代理實現域名到指定的 ip

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/14388.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/14388.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/14388.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

WordPress插件Disable WP REST API,可根據是否登錄來禁用REST API

前面跟大家分享了代碼版禁用WordPress REST API的方法(詳見『WordPress4.7以上版本如何禁用JSON REST API?』),不過有些站長不太敢折騰自己的網站代碼,那么建議試試這款Disable WP REST API,它可以&#xf…

小結5:朗讀練習第二段

五、朗讀練習2 2024-5-6始,5-14終,5-15寫。 我漸漸體會到一些朗讀的樂趣。但我還要考研,要寫作業、期末考試。如果是在大一該多好。我可以就這樣一天一天的寫下去,慢慢地有一些自己的作品,還能錄視頻發到b站上。 上一篇…

通過修改物理內存實現跨進程內存讀寫

習一下利用修改物理內存來跨進程內存讀寫 系統:win10 21h1 x64 編譯環境: vs2022 詳情見附錄 基礎 虛擬地址轉物理地址 虛擬地址也稱線性地址,一個線性地址進程的DirBase地址可以轉換成物理地址。先來看線性地址的含義 在x64體系中只實現了48位的virtu…

刀片式服務器的主要組件有哪些?

刀片式服務器是專門為特殊應用行業跟高密度計算環境設計的,是高可用高密度低成本的服務器平臺,刀片服務器這個名稱主要是根據產品的形狀,刀片式服務器的組成單元外形扁平,就像刀片一樣,整體設計的比較緊湊,…

C#和C++有什么區別?

C#和C都是廣泛使用的編程語言,但它們在設計理念、應用場景和語法上有許多顯著的區別。以下是一些關鍵區別的詳細介紹: 1. 設計理念和目的 C: 設計目的:C是一種面向系統編程和應用程序開發的語言,具有高效性和靈活性…

電工杯b題

雖然這次休息不打,但是看了一下,我比較傾向于機器學習灌水(doge

刷題之從前序遍歷與中序遍歷序列構造二叉樹(leetcode)

從前序遍歷與中序遍歷序列構造二叉樹 前序遍歷&#xff1a;中左右 中序遍歷&#xff1a;左中右 前序遍歷的第一個數必定為根節點&#xff0c;再到中序遍歷中找到該數&#xff0c;數的左邊是左子樹&#xff0c;右邊是右子樹&#xff0c;進行遞歸即可。 #include<vector>…

Juniper查看并調整策略順序

1.查看安全策略 >show security policies 順序就是按照顯示出來的順序&#xff0c;與Index無關&#xff0c;從上到下匹配 2. 調整防火墻策略 #insert security policies from-zone CAMERAS to-zone INTERNET policy CAMERAS-to-NTP before policy CAMERAS-to-INTERNET …

操作系統3_作業與處理機調度

操作系統3_作業與處理機調度 文章目錄 操作系統3_作業與處理機調度1. 作業的概念與組成2. 作業的建立及狀態3. 處理機調度相關概念3.1 調度級別3.2 調度隊列模型3.3 選擇準則4. 作業調度與進程調度5. 典型處理機調度算法5.1 先來先服務算法FCFS5.2 短作業優先算法SJF5.3 優先級…

【力扣一輪】字符串異位 數組并集

先驗知識記錄&#xff1a; 遇到哈希問題&#xff0c;想到三種數據結構&#xff1a; ①數組&#xff1a;適用于哈希值比較小&#xff0c;范圍較小&#xff0c; ②set&#xff1a;適用于哈希值較大。 ③map&#xff1a;如果需要用到鍵值對&#xff0c;則用之。 242.有效的字母…

撥云見日,ATFX七場研討會揭秘投資先機

財經先機&#xff0c;一手掌握。近期&#xff0c;隨著國際金價持續走高&#xff0c;避險情緒高漲&#xff0c;由此激發新一輪投資熱潮。作為業界領先的金融創新品牌&#xff0c;ATFX深受投資者認可和信賴&#xff0c;為助力廣大投資者了解市場運行規律&#xff0c;捕捉財經脈絡…

C++通過讀取二進制流的方式來解析PE(靜態文件讀取法)

步驟解讀 先選擇文件讀取文件二進制流從二進制流讀取DOS頭&#xff08;DOS_HEADER&#xff09;&#xff0c;長度64字節讀取DOS殼&#xff08;DOS_STUB&#xff09;&#xff0c;DOS頭開始&#xff0c;長度至到dosHeader->e_lfanew偏移量讀取PE標識&#xff08;Signature&…

520節日特別篇:構建浪漫互動網站實戰技巧

520節日特別篇&#xff1a;構建浪漫互動網站實戰技巧 一、非零分積分資源概覽二、基礎概念與作用說明HTML5 Canvas & SVGCSS3 動畫與過渡JavaScript 動態交互 三、實戰代碼示例&#xff1a;打造浪漫愛心雨HTML 結構CSS 樣式JavaScript 邏輯 四、實際開發應用思路1. 個性化祝…

怎么畫思維導圖?方法介紹

怎么畫思維導圖&#xff1f;在數字化時代&#xff0c;思維導圖已成為我們工作、學習和生活中的得力助手。它不僅能幫助我們更好地組織和表達思想&#xff0c;還能提升我們的思維能力和創造力。那么&#xff0c;哪些軟件可以畫思維導圖呢&#xff1f;本文將為你揭秘幾款功能強大…

Linux 應用入門(一)

1. 交叉編譯 概念&#xff1a;在當前編譯平臺下&#xff0c;編譯出來的程序能運行在體系結構不同的另一種目標平臺上&#xff0c;但是編譯平臺本身卻不能運行該程序。 為什么需要交叉編譯&#xff1f; 速度&#xff1a;目標平臺得運行速度比主機往往慢得多&#xff0c;因為許多…

Docker+nginx部署SpringBoot+vue前后端分離項目(保姆及入門指南)

前后分離項目部署 項目回顧工具上線準備1、win1.1、前端1.2、后端 2、linux環境2.1、安裝docker2.2、安裝docker compose2.3、編寫Dockerfile文件2.4、編寫docker-compose.yml文件2.5、修改application-pro.yml2.6、準備好nginx的掛載目錄和配置2.7、部署后端服務 項目回顧 書…

數據挖掘實戰-基于內容協同過濾算法的電影推薦系統

&#x1f935;?♂? 個人主頁&#xff1a;艾派森的個人主頁 ?&#x1f3fb;作者簡介&#xff1a;Python學習者 &#x1f40b; 希望大家多多支持&#xff0c;我們一起進步&#xff01;&#x1f604; 如果文章對你有幫助的話&#xff0c; 歡迎評論 &#x1f4ac;點贊&#x1f4…

【從C++到Java一周速成】章節9:構造器

章節9&#xff1a;構造器 對于一個類來說&#xff0c;一般有三種常見的成員&#xff1a;屬性、方法、構造器。 這三種成員都可以定義零個或多個。 構造方法也叫構造器&#xff0c;是一個創建對象時被自動調用的特殊方法&#xff0c;用于對象的初始化。 Java通過new關鍵字來調用…

OpenHarmony集成OCR三方庫實現文字提取

1. 簡介 Tesseract(Apache 2.0 License)是一個可以進行圖像OCR識別的C庫&#xff0c;可以跨平臺運行 。本樣例基于Tesseract庫進行適配&#xff0c;使其可以運行在OpenAtom OpenHarmony&#xff08;以下簡稱“OpenHarmony”&#xff09;上&#xff0c;并新增N-API接口供上層應…

.Net Core學習筆記 框架特性(注入、配置)

注&#xff1a;直接學習的.Net Core 6&#xff0c;此版本有沒有startup.cs相關的內容 項目Program.cs文件中 是定義項目加載 啟動的地方 //通過builder對項目進行配置、服務的加載 var builder WebApplication.CreateBuilder(args); builder.Services.AddControllers();//將…