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

老马啸西风發表於2024-05-24

提供靜態內容

配置 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

相關文章