配置 NGINX 和 NGINX Plus 作為 Web 伺服器 設置虛擬伺服器 在 NGINX Plus 配置文件中,必須包含至少一個 server 指令來定義一個虛擬伺服器。 當 NGINX Plus 處理請求時,首先選擇將服務於該請求的虛擬伺服器。 http { server { # 伺服器配 ...
配置 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-02-Nginx Ubuntu 安裝 + windows10 + WSL ubuntu 安裝 nginx 實戰筆記
Nginx-05-nginx 反向代理是什麼?windows 下如何配置使用 nginx
Nginx R31 doc 官方文檔-01-nginx 如何安裝
Nginx R31 doc-03-HTTP Load Balancing HTTP 負載均衡
Nginx R31 doc-04-HTTP Health Checks
Nginx R31 doc-06-Accepting the PROXY Protocol
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-18-High Availability Support for NGINX Plus in On-Premises Deployments
Nginx 實戰-01-nginx windows 安裝筆記
Nginx 實戰-02-nginx proxy_pass 服務代理訪問 使用筆記 ubuntu nodejs
Nginx 實戰-04-nginx 不同的地址訪問不同的服務
Nginx 實戰-05-nginx 反向代理實現功能變數名稱到指定的 ip