亚洲视频二区_亚洲欧洲日本天天堂在线观看_日韩一区二区在线观看_中文字幕不卡一区

公告:魔扣目錄網(wǎng)為廣大站長提供免費收錄網(wǎng)站服務(wù),提交前請做好本站友鏈:【 網(wǎng)站目錄:http://www.430618.com 】, 免友鏈快審服務(wù)(50元/站),

點擊這里在線咨詢客服
新站提交
  • 網(wǎng)站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

程序員架構(gòu)學習筆記——Nginx 靜態(tài)文件服務(wù)配置及優(yōu)化

 

根目錄和索引文件

root 指令指定將用于搜索文件的根目錄。 為了獲取所請求文件的路徑,Nginx 將請求 URI 附加到 root 指令指定的路徑。該指令可以放在 http {},server {} 或 location {} 上下文中的任何級別。在下面的示例中,為虛擬服務(wù)器定義了 root 指令。 它適用于未包含根指令的所有l(wèi)ocation {} 塊,以顯式重新定義根:

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

在這里,NGINX 針對 /images/ 開頭的 URI 將在文件系統(tǒng)的 /www/ data/images/ 目錄中搜索相應(yīng)文件。 如果 URI 以 .mp3 或 .mp4 擴展名結(jié)尾,則 NGINX 會在 /www/media/ 目錄中搜索該文件,因為它是在匹配的位置塊中定義的。

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

location /images/ {
 autoindex on;
}

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

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

這里使用的 $geo 變量是通過 geo 指令設(shè)置的自定義變量。變量的值取決于客戶端的 IP 地址。

要返回索引文件,NGINX 會檢查它是否存在,然后對通過將索引文件的名稱附加到基礎(chǔ) URI 上獲得的新 URI 進行內(nèi)部重定向。內(nèi)部重定向?qū)е聦ξ恢玫男滤阉鳎⑶铱赡茏罱K位于另一個位置,如以下示例所示:

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

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

嘗試幾種選擇

try_files 指令可用于檢查指定的文件或目錄是否存在; NGINX 會進行內(nèi)部重定向,如果沒有,則返回指定的狀態(tài)代碼。例如,要檢查對應(yīng)于請求 URI 的文件是否存在,請使用 try_files指令和 $uri 變量,如下所示:

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

該文件以 URI 的形式指定,使用在當前位置或虛擬服務(wù)器的上下文中設(shè)置的根或別名指令進行處理。在這種情況下,如果對應(yīng)于原始 URI 的文件不存在,NGINX 會將內(nèi)部重定向到最后一個參數(shù)指定的 URI,并返回 /www/data/images/default.gif。

最后一個參數(shù)也可以是狀態(tài)代碼(直接以等號開頭)或位置名稱。 在以下示例中,如果 try_files 指令的所有參數(shù)都不會解析為現(xiàn)有文件或目錄,則會返回 404 錯誤。

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

在下一個示例中,如果原始 URI 和帶有附加尾部斜杠的 URI 都不會解析為現(xiàn)有文件或目錄,則會將請求重定向到指定位置,并將其傳遞給代理服務(wù)器。

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

有關(guān)更多信息,請觀看內(nèi)容緩存網(wǎng)絡(luò)研討會,了解如何顯著提高網(wǎng)站性能,并深入了解 NGINX 的緩存功能。

優(yōu)化服務(wù)內(nèi)容的性能

加載速度是提供任何內(nèi)容的關(guān)鍵因素。 對 NGINX 配置進行微小優(yōu)化可以提高生產(chǎn)力并幫助實現(xiàn)最佳性能。

啟用 sendfile

默認情況下,NGINX 會自行處理文件傳輸,并在發(fā)送之前將文件復制到緩沖區(qū)中。 啟用 sendfile 指令消除了將數(shù)據(jù)復制到緩沖區(qū)的步驟,并允許將數(shù)據(jù)從一個文件描述符直接復制到另一個文件描述符?;蛘撸瑸榱朔乐挂粋€快速連接完全占用工作進程,可以使用 sendfile_max_chunk 指令限制單個sendfile() 調(diào)用中傳輸?shù)臄?shù)據(jù)量(在本例中為1 MB):

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

啟用 tcp_nopush

將 tcp_nopush 指令與 sendfile on; 指令一起使用。這使得 NGINX 可以在 sendfile() 獲取數(shù)據(jù)塊之后立即在一個數(shù)據(jù)包中發(fā)送 HTTP 響應(yīng)頭。

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

啟用 tcp_nodelay

tcp_nodelay 指令允許覆蓋 Nagle 的算法,該算法最初設(shè)計用于解決慢速網(wǎng)絡(luò)中小數(shù)據(jù)包的問題。該算法將許多小數(shù)據(jù)包合并為一個較大的數(shù)據(jù)包,并以 200 毫秒的延遲發(fā)送數(shù)據(jù)包。如今,在提供大型靜態(tài)文件時,無論數(shù)據(jù)包大小如何,都可以立即發(fā)送數(shù)據(jù)。延遲也會影響在線應(yīng)用程序(ssh,在線游戲,在線交易等)。默認情況下,tcp_nodelay 指令設(shè)置為 on,這意味著禁用了 Nagle的算法。此指令僅用于 keepalive 連接:

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

優(yōu)化積壓隊列

其中一個重要因素是 NGINX 可以多快地處理傳入連接。一般規(guī)則是在建立連接時,將其放入偵聽套接字的 "listen" (監(jiān)聽)隊列中。在正常負載下,隊列很小或根本沒有隊列。但是在高負載下,隊列會急劇增長,導致性能不均勻,連接中斷,延遲增加。

顯示積壓隊列

使用命令 netstat -Lan 來顯示當前監(jiān)聽隊列。輸出可能如下所示,它顯示在端口 80上的監(jiān)聽隊列中,有 10 個未接受的連接,這些連接針對配置的最多 128 個排隊連接。這種情況很正常。

Current listen queue sizes (qlen/incqlen/maxqlen)
Listen Local Address 
0/0/128 *.12345 
10/0/128 *.80 
0/0/128 *.8080

相反,在以下命令中,未接受的連接數(shù)(192)超過了 128 的限制。當網(wǎng)站流量很大時,這種情況很常見。要獲得最佳性能,需要在操作系統(tǒng)和 NGINX 配置中增加可以排隊等待 NGINX 接受的最大連接數(shù)。

Current listen queue sizes (qlen/incqlen/maxqlen)
Listen Local Address 
0/0/128 *.12345 
192/0/128 *.80 
0/0/128 *.8080

調(diào)整操作系統(tǒng)

將 net.core.somaxconn 內(nèi)核參數(shù)的值從其默認值(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 文件中。

調(diào)整 NGINX

如果將 somaxconn 內(nèi)核參數(shù)設(shè)置為大于 512 的值,請將 backlog 參數(shù)增加在 NGINX listen 指令以匹配修改:

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

© 文章翻譯自 Nginx Serving Static Content,部分做了語義調(diào)整。

分享到:
標簽:靜態(tài) 文件 服務(wù) Nginx
用戶無頭像

網(wǎng)友整理

注冊時間:

網(wǎng)站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網(wǎng)站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網(wǎng)站吧!
最新入駐小程序

數(shù)獨大挑戰(zhàn)2018-06-03

數(shù)獨一種數(shù)學游戲,玩家需要根據(jù)9

答題星2018-06-03

您可以通過答題星輕松地創(chuàng)建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學四六

運動步數(shù)有氧達人2018-06-03

記錄運動步數(shù),積累氧氣值。還可偷

每日養(yǎng)生app2018-06-03

每日養(yǎng)生,天天健康

體育訓練成績評定2018-06-03

通用課目體育訓練成績評定