首頁 運維 Nginx Nginx靜態檔案服務如何設定及最佳化

Nginx靜態檔案服務如何設定及最佳化

May 13, 2023 am 09:04 AM
nginx

根目錄和索引檔案

root 指令指定將用於搜尋檔案的根目錄。為了取得所請求檔案的路徑,nginx 將請求 uri 附加到 root 指令指定的路徑。該指令可以放在 http {} , server {} 或 location {} 上下文中的任何層級。在下面的範例中,為虛擬伺服器定義了 root 指令。它適用於未包含根指令的所有location {} 區塊,以明確重新定義根:

server {
  root /www/data;

  location / {
  }

  location /images/ {
  }

  location ~ \.(mp3|mp4) {
    root /www/media;
  }
}
登入後複製

#在這裡,nginx 針對/images/ 開頭的uri 將在檔案系統的/www/ data/images / 目錄中搜尋相應檔案。如果 uri 以 .mp3 或 .mp4 副檔名結尾,則 nginx 會在 /www/media/ 目錄中搜尋該文件,因為它是在匹配的位置區塊中定義的。

如果請求以 / 結尾,則 nginx 將其視為對目錄的請求,並嘗試在目錄中尋找索引檔案。 index 指令定義索引檔案的名稱(預設值為 index.html)。若要繼續該範例,如果請求 uri 是 /images/some/path/ ,則 nginx 會傳回檔案 /www/data/images/some/path/index.html (如果存在)。如果沒有,nginx 預設回傳 http 404 錯誤(未找到)。要設定 nginx 以傳回自動產生的目錄列表,請在 autoindex 指令中包含 on 參數:

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 的形式指定,使用在目前位置或虛擬伺服器的上下文中設定的根或別名指令進行處理。在這種情況下,如果對應於原始 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 配置進行微小最佳化可以提高生產力並幫助實現最佳效能。

啟用 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 指令設定為 on,這表示禁用了 nagle的演算法。此指令僅用於 keepalive 連線:

location /mp3 {
  tcp_nodelay    on;
  keepalive_timeout 65;
  #...
  
}
登入後複製

最佳化積壓佇列

其中一个重要因素是 nginx 可以多快地处理传入连接。一般规则是在建立连接时,将其放入侦听套接字的 "listen" (监听)队列中。在正常负载下,队列很小或根本没有队列。但是在高负载下,队列会急剧增长,导致性能不均匀,连接中断,延迟增加。

显示积压队列使用命令 netstat -lan 来显示当前监听队列。输出可能如下所示,它显示在端口 80上的监听队列中,有 10 个未接受的连接,这些连接针对配置的最多 128 个排队连接。这种情况很正常。

current listen queue sizes (qlen/incqlen/maxqlen)
listen     local address     
0/0/128    *.12345      
10/0/128    *.80    
0/0/128    *.8080
登入後複製

相反,在以下命令中,未接受的连接数(192)超过了 128 的限制。当网站流量很大时,这种情况很常见。要获得最佳性能,需要在操作系统和 nginx 配置中增加可以排队等待 nginx 接受的最大连接数。

current listen queue sizes (qlen/incqlen/maxqlen)
listen     local address     
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 的命令为 1. sudo sysctl -w net.core.somaxconn=4096 2. 将 net.core.somaxconn = 4096 加入到 /etc/sysctl.conf 文件中。

调整 nginx

如果将 somaxconn 内核参数设置为大于 512 的值,请将 backlog 参数增加在 nginx listen 指令以匹配修改:

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

}
登入後複製

以上是Nginx靜態檔案服務如何設定及最佳化的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解鎖Myrise中的所有內容
4 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

如何檢查Debian OpenSSL配置 如何檢查Debian OpenSSL配置 Apr 12, 2025 pm 11:57 PM

本文介紹幾種檢查Debian系統OpenSSL配置的方法,助您快速掌握系統安全狀態。一、確認OpenSSL版本首先,驗證OpenSSL是否已安裝及版本信息。在終端輸入以下命令:opensslversion若未安裝,系統將提示錯誤。二、查看配置文件OpenSSL主配置文件通常位於/etc/ssl/openssl.cnf。您可以使用文本編輯器(例如nano)查看:sudonano/etc/ssl/openssl.cnf此文件包含密鑰、證書路徑及加密算法等重要配置信息。三、利用ope

Nginx SSL證書更新Debian教程 Nginx SSL證書更新Debian教程 Apr 13, 2025 am 07:21 AM

本文將指導您如何在Debian系統上更新NginxSSL證書。第一步:安裝Certbot首先,請確保您的系統已安裝certbot和python3-certbot-nginx包。若未安裝,請執行以下命令:sudoapt-getupdatesudoapt-getinstallcertbotpython3-certbot-nginx第二步:獲取並配置證書使用certbot命令獲取Let'sEncrypt證書並配置Nginx:sudocertbot--nginx按照提示選

Debian Nginx日誌路徑在哪裡 Debian Nginx日誌路徑在哪裡 Apr 12, 2025 pm 11:33 PM

Debian系統中,Nginx的訪問日誌和錯誤日誌默認存儲位置如下:訪問日誌(accesslog):/var/log/nginx/access.log錯誤日誌(errorlog):/var/log/nginx/error.log以上路徑是標準DebianNginx安裝的默認配置。如果您在安裝過程中修改過日誌文件存放位置,請檢查您的Nginx配置文件(通常位於/etc/nginx/nginx.conf或/etc/nginx/sites-available/目錄下)。在配置文件中

如何利用Nginx日誌提升網站速度 如何利用Nginx日誌提升網站速度 Apr 13, 2025 am 09:09 AM

網站性能優化離不開對訪問日誌的深入分析。 Nginx日誌記錄了用戶訪問網站的詳細信息,巧妙利用這些數據,可以有效提升網站速度。本文將介紹幾種基於Nginx日誌的網站性能優化方法。一、用戶行為分析與優化通過分析Nginx日誌,我們可以深入了解用戶行為,並據此進行針對性優化:高頻訪問IP識別:找出訪問頻率最高的IP地址,針對這些IP地址優化服務器資源配置,例如增加帶寬或提升特定內容的響應速度。狀態碼分析:分析不同HTTP狀態碼(例如404錯誤)出現的頻率,找出網站導航或內容管理中的問題,並進

Nginx日誌中的安全問題如何防範 Nginx日誌中的安全問題如何防範 Apr 13, 2025 am 07:36 AM

Nginx日誌安全至關重要,它可能洩露敏感信息或暴露惡意訪問企圖。本文提供一系列有效措施,幫助您提升Nginx日誌安全性:訪問控制:嚴格限制對Nginx日誌文件的訪問權限。僅授權人員可訪問,並利用文件系統權限控制訪問。同時,實施日誌輪轉和歸檔策略,減小日誌文件規模,降低風險。信息脫敏:日誌格式應避免記錄敏感信息(如密碼、信用卡信息)。使用日誌脫敏工具或自定義日誌格式,隱藏敏感數據。實時監控與告警:部署監控系統實時追踪Nginx日誌中的異常行為。配置告警機制,

Nginx日誌中的請求類型有哪些 Nginx日誌中的請求類型有哪些 Apr 13, 2025 am 09:21 AM

Nginx服務器日誌記錄了各種客戶端請求信息,本文將詳細介紹Nginx日誌中常見的請求類型及其相關信息。一、HTTP請求方法Nginx日誌記錄了多種HTTP請求方法,用於指示客戶端與服務器交互的方式:GET:最常用的請求方法,用於從服務器獲取數據,例如網頁、圖片、CSS文件等。請求參數通常包含在URL中。 POST:用於向服務器提交數據,常用於表單提交或文件上傳。數據包含在請求體中,而非URL。 PUT:用於上傳文件或更新服務器上的現有資源。數據同樣位於請求體中。 DEL

如何通過FetchDebian安裝軟件 如何通過FetchDebian安裝軟件 Apr 13, 2025 am 06:00 AM

Debian系統軟件安裝,最便捷的方法莫過於使用APT包管理器。以下步驟將指導您如何高效地使用APT:更新軟件包信息:首先,更新本地軟件包列表,確保獲取最新的軟件信息和可用更新。執行以下命令:sudoaptupdate搜索目標軟件:使用aptsearch命令查找所需軟件。例如,要查找文本編輯器,輸入:aptsearcheditor系統會返回所有匹配的軟件包。安裝軟件:找到目標軟件包後,使用aptinstall命令進行安裝。例如,安裝Nginx網絡服務器:s

Debian系統OpenSSL漏洞修復 Debian系統OpenSSL漏洞修復 Apr 13, 2025 am 06:12 AM

確保Debian系統的OpenSSL安全,請遵循以下步驟:一、系統更新:首先,更新您的Debian系統至最新版本。使用以下命令更新軟件包列表併升級所有已安裝軟件:sudoaptupdatesudoaptupgrade二、版本確認:檢查當前OpenSSL版本:opensslversion三、OpenSSL升級:若版本過舊,請升級。方法一:直接升級(推薦):使用以下命令直接升級到最新穩定版OpenSSL:sudoaptinstall--only-upgrade

See all articles