提供靜態內容
配置 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 系列
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