Nginx R31 doc-08-NGINX 和 NGINX Plus 作為 Web 伺服器

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

配置 NGINX 和 NGINX Plus 作為 Web 伺服器

設定虛擬伺服器

在 NGINX Plus 配置檔案中,必須包含至少一個 server 指令來定義一個虛擬伺服器。

當 NGINX Plus 處理請求時,首先選擇將服務於該請求的虛擬伺服器。

http {
    server {
        # 伺服器配置
    }
}

可以在 http 上下文中新增多個 server 指令來定義多個虛擬伺服器。

伺服器配置塊通常包括一個 listen 指令,用於指定伺服器監聽請求的 IP 地址和埠(或 Unix 域套接字和路徑)。接受 IPv4 和 IPv6 地址;將 IPv6 地址括在方括號中。

下面的示例顯示了一個伺服器配置,該伺服器監聽 IP 地址 127.0.0.1 和埠 8080:

server {
    listen 127.0.0.1:8080;
    # 其他伺服器配置
}

如果省略了埠,則使用標準埠。同樣,如果省略了地址,則伺服器將監聽所有地址。如果完全不包含 listen 指令,則使用“標準”埠為 80/tcp,而“預設”埠為 8000/tcp,這取決於超級使用者許可權。

如果有多個伺服器匹配請求的 IP 地址和埠,NGINX Plus 將請求的 Host 標頭欄位與 server 塊中的 server_name 指令進行比較。server_name 的引數可以是完整(精確)名稱、萬用字元或正規表示式。萬用字元是一個以星號 (*) 開頭、結尾或兩者兼有的字元字串;星號匹配任何字元序列。NGINX Plus 使用 Perl 語法進行正規表示式;在配置檔案中出現的順序決定了它們的優先順序。

server {
    listen      80;
    server_name example.org www.example.org;
    #...
}

如果 Host 標頭欄位匹配了多個名稱,則 NGINX Plus 會按以下順序搜尋名稱,並使用找到的第一個匹配項:

  • 精確名稱
  • 最長的以星號開頭的萬用字元,例如 *.example.org
  • 最長的以星號結尾的萬用字元,例如 mail.*
  • 第一個匹配的正規表示式(按照配置檔案中出現的順序)

如果 Host 標頭欄位與任何伺服器名稱都不匹配,則 NGINX Plus 會將請求路由到該請求到達的埠的預設伺服器。預設伺服器是 nginx.conf 檔案中列出的第一個伺服器,除非您使用 listen 指令的 default_server 引數來顯式地指定伺服器為預設伺服器。

server {
    listen 80 default_server;
    #...
}

配置位置

NGINX Plus 可以根據請求 URI 將流量傳送到不同的代理或為不同的檔案提供服務。這些塊使用位於 server 指令中的 location 指令定義。

例如,您可以定義三個 location 塊來指示虛擬伺服器將一些請求傳送到一個代理伺服器,將其他請求傳送到不同的代理伺服器,並透過從本地檔案系統提供檔案來為其餘的請求提供服務。

NGINX Plus 將請求 URI 與所有 location 指令的引數進行比較,並應用匹配位置中定義的指令。在每個 location 塊內部,通常可以(有少數例外)放置更多的 location 指令,以進一步細化特定組的請求的處理方式。

在 location 指令中,有兩種型別的引數:字首字串(路徑名)和正規表示式。對於請求 URI 要與字首字串匹配,必須以字首字串開頭。

下面的示例 location 使用路徑名引數,匹配以 /some/path/ 開頭的請求 URI,例如 /some/path/document.html。(它不會匹配 /my-site/some/path,因為 /some/path 不是該 URI 的開頭。)

location /some/path/ {
    #...
}

正規表示式前面帶有波浪號()用於區分大小寫匹配,或者帶有波浪號-星號(*)用於不區分大小寫匹配。下面的示例匹配任何位置包含字串 .html 或 .htm 的 URI。

location ~ \.html? {
    #...
}

NGINX 位置優先順序

為了找到最匹配 URI 的位置,NGINX Plus 首先將 URI 與具有字首字串的位置進行比較。然後搜尋具有正規表示式的位置。

對於正規表示式,會給予更高的優先順序,除非使用 ^~ 修飾符。在字首字串中,NGINX Plus 選擇最具體的一個(即最長且最完整的字串)。選擇用於處理請求的位置的確切邏輯如下所示:

  • 將 URI 與所有字首字串進行比較。
  • =(等號)修飾符定義 URI 和字首字串的精確匹配。如果找到了精確匹配,則搜尋停止。
  • 如果 ^~(插入波浪號)修飾符在最長匹配的字首字串之前,則不檢查正規表示式。
  • 儲存最長匹配的字首字串。
  • 將 URI 與正規表示式進行比較。
  • 當找到第一個匹配的正規表示式時停止處理,並使用相應的位置。
  • 如果沒有正規表示式匹配,則使用對應於儲存的字首字串的位置。

對於 = 修飾符的典型用例是請求 /(斜槓)。如果請求 / 頻繁,則將 = / 指定為 location 指令

的引數可以加快處理速度,因為在第一次比較後搜尋匹配項就會停止。

location = / {
    #...
}

位置上下文可以包含指令,定義如何解析請求 - 服務靜態檔案或將請求傳遞到代理伺服器。

在下面的示例中,匹配第一個位置上下文的請求將從 /data 目錄提供檔案,而匹配第二個位置上下文的請求將被傳遞到託管 <www.example.com> 域的代理伺服器。

server {
    location /images/ {
        root /data;
    }

    location / {
        proxy_pass http://www.example.com;
    }
}

root 指令指定檔案系統路徑,用於搜尋要提供的靜態檔案。與位置相關聯的請求 URI 附加到路徑以獲取要提供的靜態檔案的完整名稱。在上面的示例中,對於 /images/example.png 的請求,NGINX Plus 會提供檔案 /data/images/example.png。

proxy_pass 指令將請求傳遞到使用配置的 URL 訪問的代理伺服器。然後將來自代理伺服器的響應傳遞迴客戶端。在上面的示例中,所有 URI 不以 /images/ 開頭的請求都將傳遞到代理伺服器。

使用變數

您可以在配置檔案中使用變數,使 NGINX Plus 根據定義的情況處理請求。變數是在執行時計算的命名值,用作指令的引數。變數以其名稱的開頭為 $(美元)符號表示。變數根據 NGINX 的狀態定義資訊,例如當前正在處理的請求的屬性。

有許多預定義的變數,例如核心 HTTP 變數,並且您可以使用 set、map 和 geo 指令定義自定義變數。大多數變數在執行時計算,幷包含與特定請求相關的資訊。例如,$remote_addr 包含客戶端 IP 地址,$uri 包含當前 URI 值。

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

相關文章