亚洲区国产区激情区无码区,国产成人mv视频在线观看,国产A毛片AAAAAA,亚洲精品国产首次亮相在线

Nginx 靜態(tài)網(wǎng)頁服務(wù)器

在本節(jié)中,我們將討論如何配置 Nginx 靜態(tài)內(nèi)容。

根目錄和索引文件

root 指令用于定義將用于搜索文件的根目錄。為了獲得請求文件的路徑,NGINX 將請求的 URI 附加到由 root 指令定義的路徑。該指令可以放置在服務(wù)器 {}、http {} 或位置 {} 上下文中的任何級別。

讓我們看一個例子;在這里,為虛擬服務(wù)器指定了 root 指令。它適用于所有沒有添加 root 指令來顯式重新定義 root 的 location {} 塊:

server {  
    root /www/data;  
  
    location / {  
    }  
  
    location /images/ {  
    }  
  
    location ~ \.(mp3|mp4) {  
        root /www/media;  
    }  
}  
在上面的例子中,NGINX 在文件系統(tǒng)的 /www/data/images/ 目錄中搜索以 /images/ 開頭的 URI(統(tǒng)一資源標(biāo)識符)。但是如果 URI 以 .mp3 或 .mp4 擴展名結(jié)尾,NGINX 會在 /www/media/ 目錄中查找該文件,因為它是在匹配的 locatioin 塊中指定的,覆蓋了上一級的 root 指令。

如果請求后綴帶有斜杠,NGINX 會將其視為對目錄的請求,并嘗試在該目錄中查找索引文件并返回。index 指令指定索引文件的名稱(默認(rèn)值為 index.html)。繼續(xù)這個例子,如果請求 URI 是/images/some/path/,NGINX 傳送文件/www/data/images/some/path/index.html如果它存在。如果沒有,則默認(rèn)情況下 NGINX 返回 HTTP 代碼 404(未找到)。要將 NGINX 配置為返回自動生成的目錄列表,請將“on”參數(shù)添加到自動索引指令中:

location /images/ {  
    autoindex on;  
} 

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

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

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

為了返回索引文件,NGINX 檢查文件是否存在,然后通過將索引文件的名稱附加到基本 URI 來進行內(nèi)部重定向到 URI。這個內(nèi)部重定向產(chǎn)生一個新的 location 搜索匹配過程,如下例所示:

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 ,然后新的匹配到第二個 location ~ \.php { } ,請求被代理。

try_files嘗試幾種選擇

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

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

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

最后一個參數(shù)也可以是一個狀態(tài)碼,直接在等號或命名 location 之前。在下面的示例中,如果 try_files 指令的任何參數(shù)都沒有解析為現(xiàn)有文件或目錄,則會返回 404 錯誤。

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

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

加載速度是提供任何內(nèi)容的關(guān)鍵因素。對我們的 NGINX 配置進行小幅優(yōu)化可能會提高生產(chǎn)力并有助于達(dá)到最佳性能。

啟用發(fā)送文件

默認(rèn)情況下,NGINX 自己控制文件傳輸,并在發(fā)送之前將文件復(fù)制到緩沖區(qū)中。當(dāng)我們啟用 sendfile 指令時,它將消除將數(shù)據(jù)復(fù)制到緩沖區(qū)的步驟,并允許將數(shù)據(jù)從一個文件描述符直接復(fù)制到另一個文件描述符?;蛘?,為了阻止快速連接完全占用工作進程,我們可以使用 sendfile_max_chunk 指令來限制在單個 sendfile() 調(diào)用中傳輸?shù)臄?shù)據(jù)量(在本例中為 1 MB):

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

啟用 tcp_nopush

將 tcp_nopush 指令與指令中的 sendfile 一起添加。這使 NGINX 能夠在從 sendfile() 獲取數(shù)據(jù)塊后立即在一個數(shù)據(jù)包中發(fā)送 HTTP 響應(yīng)標(biāo)頭。

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