模組 ngx_http_core_module
指令
語法 |
absolute_redirect |
---|---|
預設 |
absolute_redirect on; |
上下文 |
http , server , location |
此指令出現在 1.11.8 版本中。
如果停用,nginx 發出的重新導向將會是相對的。
另請參閱 server_name_in_redirect 和 port_in_redirect 指令。
語法 |
aio |
---|---|
預設 |
aio off; |
上下文 |
http , server , location |
此指令出現在 0.8.11 版本中。
在 FreeBSD 和 Linux 上啟用或停用非同步檔案 I/O (AIO) 的使用。
location /video/ { aio on; output_buffers 1 64k; }
在 FreeBSD 上,可以從 FreeBSD 4.3 開始使用 AIO。在 FreeBSD 11.0 之前,AIO 可以靜態連結到核心中
options VFS_AIO
或以動態方式載入為核心可載入模組
kldload aio
在 Linux 上,可以從核心版本 2.6.22 開始使用 AIO。此外,必須啟用 directio,否則讀取將會被阻塞。
location /video/ { aio on; directio 512; output_buffers 1 128k; }
在 Linux 上,directio 只能用於讀取對齊 512 位元組邊界(或 XFS 的 4K)的區塊。檔案未對齊的結尾以阻塞模式讀取。對於位元組範圍請求和非從檔案開頭開始的 FLV 請求也相同:讀取檔案開頭和結尾未對齊的資料將會被阻塞。
當在 Linux 上同時啟用 AIO 和 sendfile 時,AIO 用於大於或等於 directio 指令中指定大小的檔案,而 sendfile 用於較小大小的檔案或當 directio 停用時。
location /video/ { sendfile on; aio on; directio 8m; }
最後,可以使用多執行緒 (1.7.11) 讀取和傳送檔案,而不會阻塞工作程序。
location /video/ { sendfile on; aio threads; }
讀取和傳送檔案操作會卸載到指定的 池的執行緒。如果省略池名稱,則使用名稱為「default
」的池。池名稱也可以使用變數設定。
aio threads=pool$disk;
依預設,多執行緒已停用,應該使用 --with-threads
組態參數啟用。目前,多執行緒僅與 epoll、kqueue 和 eventport 方法相容。檔案的多執行緒傳送僅在 Linux 上受支援。
另請參閱 sendfile 指令。
語法 |
aio_write |
---|---|
預設 |
aio_write off; |
上下文 |
http , server , location |
此指令出現在 1.9.13 版本中。
如果啟用 aio,則指定是否將其用於寫入檔案。目前,這僅在使用 aio threads
時有效,並且僅限於寫入從代理伺服器接收資料的臨時檔案。
語法 |
alias |
---|---|
預設 | — |
上下文 |
location |
定義指定位置的替代項。例如,使用下列組態
location /i/ { alias /data/w3/images/; }
在請求 “/i/top.gif
” 時,將會傳送檔案 /data/w3/images/top.gif
。
路徑
值可以包含變數,但 $document_root
和 $realpath_root
除外。
如果 alias
在以正規表示式定義的位置內使用,則此正規表示式應包含擷取,而 alias
應參考這些擷取 (0.7.40),例如
location ~ ^/users/(.+\.(?:gif|jpe?g|png))$ { alias /data/w3/images/$1; }
當位置符合指令值的最後一部分時
location /images/ { alias /data/w3/images/; }
最好改用 root 指令
location /images/ { root /data/w3; }
語法 |
auth_delay |
---|---|
預設 |
auth_delay 0s; |
上下文 |
http , server , location |
此指令出現在 1.17.10 版本中。
延遲使用 401 回應碼處理未經授權的請求,以防止當存取受到 密碼、子請求結果或 JWT 限制時,發生時序攻擊。
語法 |
chunked_transfer_encoding |
---|---|
預設 |
chunked_transfer_encoding on; |
上下文 |
http , server , location |
允許在 HTTP/1.1 中停用分塊傳輸編碼。當使用儘管標準要求,但卻無法支援分塊編碼的軟體時,可能會派上用場。
語法 |
client_body_buffer_size |
---|---|
預設 |
client_body_buffer_size 8k|16k; |
上下文 |
http , server , location |
設定讀取用戶端請求主體的緩衝區大小。如果請求主體大於緩衝區,則整個主體或僅其一部分會寫入 臨時檔案。依預設,緩衝區大小等於兩個記憶體頁面。這在 x86、其他 32 位元平台和 x86-64 上為 8K。在其他 64 位元平台上,通常為 16K。
語法 |
client_body_in_file_only |
---|---|
預設 |
client_body_in_file_only off; |
上下文 |
http , server , location |
決定 nginx 是否應該將整個用戶端請求主體儲存到檔案中。此指令可以在偵錯期間使用,或在使用 $request_body_file
變數時,或 ngx_http_perl_module 模組的 $r->request_body_file 方法時使用。
當設定為值 on
時,在請求處理後不會移除臨時檔案。
值 clean
會導致在請求處理後遺留的臨時檔案被移除。
語法 |
client_body_in_single_buffer |
---|---|
預設 |
client_body_in_single_buffer off; |
上下文 |
http , server , location |
決定 nginx 是否應該將整個用戶端請求主體儲存到單一緩衝區中。建議在使用 $request_body
變數時使用此指令,以節省涉及的複製操作次數。
語法 |
client_body_temp_path |
---|---|
預設 |
client_body_temp_path client_body_temp; |
上下文 |
http , server , location |
定義用於儲存保存用戶端請求主體的臨時檔案的目錄。在指定的目錄下,可以使用最多三層的子目錄階層。例如,在下列組態中
client_body_temp_path /spool/nginx/client_temp 1 2;
臨時檔案的路徑可能如下所示
/spool/nginx/client_temp/7/45/00000123457
語法 |
client_body_timeout |
---|---|
預設 |
client_body_timeout 60s; |
上下文 |
http , server , location |
定義讀取用戶端請求主體的逾時。逾時僅設定在兩個連續讀取操作之間的一段時間,而不是整個請求主體的傳輸。如果用戶端在此時間內未傳輸任何內容,則請求將以 408 (Request Time-out) 錯誤終止。
語法 |
client_header_buffer_size |
---|---|
預設 |
client_header_buffer_size 1k; |
上下文 |
http , server |
設定讀取用戶端請求標頭的緩衝區大小。對於大多數請求,1K 位元組的緩衝區就足夠了。但是,如果請求包含長 Cookie,或來自 WAP 用戶端,則可能不適合 1K。如果請求行或請求標頭欄位不適合此緩衝區,則會配置由 large_client_header_buffers 指令設定的較大緩衝區。
如果在 server 層級指定指令,則可以使用預設伺服器的值。詳細資訊在「虛擬伺服器選取」章節中提供。
語法 |
client_header_timeout |
---|---|
預設 |
client_header_timeout 60s; |
上下文 |
http , server |
定義讀取用戶端請求標頭的逾時。如果用戶端在此時間內未傳輸整個標頭,則請求將以 408 (Request Time-out) 錯誤終止。
語法 |
client_max_body_size |
---|---|
預設 |
client_max_body_size 1m; |
上下文 |
http , server , location |
設定允許的用戶端請求主體最大大小。如果請求中的大小超過設定的值,則會將 413 (Request Entity Too Large) 錯誤傳回給用戶端。請注意,瀏覽器無法正確顯示此錯誤。將 大小
設定為 0 會停用檢查用戶端請求主體大小。
語法 |
connection_pool_size |
---|---|
預設 |
connection_pool_size 256|512; |
上下文 |
http , server |
允許精確調整每個連線的記憶體配置。此指令對效能的影響極小,一般不應使用。依預設,此大小在 32 位元平台上等於 256 位元組,在 64 位元平台上等於 512 位元組。
在 1.9.8 版本之前,所有平台上的預設值都是 256。
語法 |
default_type |
---|---|
預設 |
default_type text/plain; |
上下文 |
http , server , location |
定義回應的預設 MIME 類型。檔案名稱副檔名到 MIME 類型的對應可以使用 types 指令設定。
語法 |
directio |
---|---|
預設 |
directio off; |
上下文 |
http , server , location |
此指令出現在 0.7.7 版本中。
啟用使用 O_DIRECT
旗標 (FreeBSD、Linux)、F_NOCACHE
旗標 (macOS) 或 directio()
函式 (Solaris) 讀取大於或等於指定 大小
的檔案。此指令會自動 (0.7.15) 停用對給定請求使用 sendfile。這對於服務大型檔案非常有用
directio 4m;
或在 Linux 上使用 aio 時。
語法 |
directio_alignment |
---|---|
預設 |
directio_alignment 512; |
上下文 |
http , server , location |
此指令出現在 0.8.11 版本中。
設定 directio 的對齊方式。在大多數情況下,512 位元組的對齊方式就足夠了。但是,在 Linux 下使用 XFS 時,需要增加到 4K。
語法 |
disable_symlinks disable_symlinks |
---|---|
預設 |
disable_symlinks off; |
上下文 |
http , server , location |
此指令出現在 1.1.15 版本中。
決定開啟檔案時應如何處理符號連結。
off
- 允許路徑名稱中的符號連結,且不進行檢查。這是預設行為。
on
- 如果路徑名稱的任何元件是符號連結,則拒絕存取檔案。
if_not_owner
- 如果路徑名稱的任何元件是符號連結,且連結和連結指向的物件具有不同的擁有者,則拒絕存取檔案。
from
=部分
- 當檢查符號連結(參數
on
和if_not_owner
)時,通常會檢查路徑名稱的所有組成部分。可以透過額外指定from
=part
參數來避免檢查路徑名稱初始部分的符號連結。在這種情況下,只會從指定的初始部分之後的路徑名稱組成部分開始檢查符號連結。如果該值不是被檢查路徑名稱的初始部分,則會像完全沒有指定此參數一樣檢查整個路徑名稱。如果該值與整個檔名相符,則不會檢查符號連結。參數值可以包含變數。
範例
disable_symlinks on from=$document_root;
此指令僅在具有 openat()
和 fstatat()
介面的系統上可用。這類系統包括 FreeBSD、Linux 和 Solaris 的現代版本。
參數 on
和 if_not_owner
會增加處理負擔。
在不支援僅為搜尋開啟目錄的系統上,要使用這些參數,需要工作程序對所有被檢查的目錄具有讀取權限。
ngx_http_autoindex_module、ngx_http_random_index_module 和 ngx_http_dav_module 模組目前會忽略此指令。
語法 |
error_page |
---|---|
預設 | — |
上下文 |
http 、server 、location 、if in location |
定義將針對指定錯誤顯示的 URI。 uri
值可以包含變數。
範例
error_page 404 /404.html; error_page 500 502 503 504 /50x.html;
這會導致內部重新導向到指定的 uri
,並將客戶端請求方法更改為 “GET
”(對於除 “GET
” 和 “HEAD
” 之外的所有方法)。
此外,可以使用 “=
response
” 語法將回應碼更改為另一個,例如
error_page 404 =200 /empty.gif;
如果錯誤回應是由代理伺服器或 FastCGI/uwsgi/SCGI/gRPC 伺服器處理,且該伺服器可能會返回不同的回應碼(例如 200、302、401 或 404),則可以使用它返回的程式碼來回應
error_page 404 = /404.php;
如果不需要在內部重新導向期間更改 URI 和方法,則可以將錯誤處理傳遞到具名位置
location / { error_page 404 = @fallback; } location @fallback { proxy_pass http://backend; }
如果 uri
處理導致錯誤,則會將最後發生的錯誤的狀態碼返回給客戶端。
也可以使用 URL 重新導向進行錯誤處理
error_page 403 http://example.com/forbidden.html; error_page 404 =301 http://example.com/notfound.html;
在這種情況下,預設會將回應碼 302 返回給客戶端。它只能變更為重新導向狀態碼之一(301、302、303、307 和 308)。
在 1.1.16 和 1.0.13 版本之前,307 碼不會被視為重新導向。
在 1.13.0 版本之前,308 碼不會被視為重新導向。
只有當目前層級上沒有定義 error_page
指令時,這些指令才會從先前的配置層級繼承。
語法 |
etag |
---|---|
預設 |
etag on; |
上下文 |
http , server , location |
此指令出現在 1.3.3 版本中。
啟用或停用靜態資源的 “ETag” 回應標頭欄位的自動生成。
語法 |
http { ... } |
---|---|
預設 | — |
上下文 |
main |
提供指定 HTTP 伺服器指令的組態檔內容。
語法 |
if_modified_since |
---|---|
預設 |
if_modified_since exact; |
上下文 |
http , server , location |
此指令出現在 0.7.24 版本中。
指定如何將回應的修改時間與 “If-Modified-Since” 請求標頭欄位中的時間進行比較
off
- 回應始終被視為已修改 (0.7.34);
exact
- 精確匹配;
before
- 回應的修改時間小於或等於 “If-Modified-Since” 請求標頭欄位中的時間。
語法 |
ignore_invalid_headers |
---|---|
預設 |
ignore_invalid_headers on; |
上下文 |
http , server |
控制是否應忽略具有無效名稱的標頭欄位。有效名稱由英文字母、數字、連字符和可能底線(由 underscores_in_headers 指令控制)組成。
如果在 server 層級指定指令,則可以使用預設伺服器的值。詳細資訊在「虛擬伺服器選取」章節中提供。
語法 |
internal; |
---|---|
預設 | — |
上下文 |
location |
指定給定的位置只能用於內部請求。對於外部請求,會返回客戶端錯誤 404(找不到)。內部請求如下:
- 由 error_page、index、internal_redirect、random_index 和 try_files 指令重新導向的請求;
- 由來自上游伺服器的 “X-Accel-Redirect” 回應標頭欄位重新導向的請求;
- 由 ngx_http_ssi_module 模組的 “
include virtual
” 命令、ngx_http_addition_module 模組指令,以及 auth_request 和 mirror 指令形成子請求; - 由 rewrite 指令更改的請求。
範例
error_page 404 /404.html; location = /404.html { internal; }
每個請求的內部重新導向次數限制為 10 次,以防止在不正確的組態中發生請求處理迴圈。如果達到此限制,則會返回錯誤 500(伺服器內部錯誤)。在這種情況下,可以在錯誤日誌中看到「重新導向或內部重新導向循環」訊息。
語法 |
keepalive_disable |
---|---|
預設 |
keepalive_disable msie6; |
上下文 |
http , server , location |
停用與行為不端的瀏覽器的 keep-alive 連線。browser
參數指定哪些瀏覽器會受到影響。值 msie6
會停用與舊版 MSIE 的 keep-alive 連線,一旦收到 POST 請求。值 safari
會停用 macOS 和 macOS 類作業系統上的 Safari 和類似 Safari 的瀏覽器的 keep-alive 連線。值 none
會啟用與所有瀏覽器的 keep-alive 連線。
在 1.1.18 版本之前,值 safari
會比對所有作業系統上的所有 Safari 和類似 Safari 的瀏覽器,並且預設會停用與它們的 keep-alive 連線。
語法 |
keepalive_requests |
---|---|
預設 |
keepalive_requests 1000; |
上下文 |
http , server , location |
此指令出現在 0.8.0 版本中。
設定可透過單個 keep-alive 連線服務的最大請求數。在達到最大請求數後,會關閉連線。
定期關閉連線對於釋放每個連線的記憶體配置是必要的。因此,使用過高的最大請求數可能會導致過度記憶體使用,不建議這樣做。
在 1.19.10 版本之前,預設值為 100。
語法 |
keepalive_time |
---|---|
預設 |
keepalive_time 1h; |
上下文 |
http , server , location |
此指令出現在 1.19.10 版本中。
限制透過單個 keep-alive 連線處理請求的最大時間。達到此時間後,會在後續請求處理後關閉連線。
語法 |
keepalive_timeout |
---|---|
預設 |
keepalive_timeout 75s; |
上下文 |
http , server , location |
第一個參數設定 keep-alive 客戶端連線在伺服器端保持開啟的逾時時間。零值會停用 keep-alive 客戶端連線。可選的第二個參數會在 “Keep-Alive: timeout=time
” 回應標頭欄位中設定一個值。兩個參數可能會不同。
“Keep-Alive: timeout=time
” 標頭欄位可由 Mozilla 和 Konqueror 識別。MSIE 會在大約 60 秒內自行關閉 keep-alive 連線。
語法 |
large_client_header_buffers |
---|---|
預設 |
large_client_header_buffers 4 8k; |
上下文 |
http , server |
設定用於讀取大型客戶端請求標頭的緩衝區的最大 number
和 size
。請求行不能超過一個緩衝區的大小,否則會向客戶端返回 414(請求 URI 過大)錯誤。請求標頭欄位也不能超過一個緩衝區的大小,否則會向客戶端返回 400(錯誤請求)錯誤。緩衝區僅按需分配。預設情況下,緩衝區大小等於 8K 位元組。如果在請求處理結束後將連線轉換為 keep-alive 狀態,則會釋放這些緩衝區。
如果在 server 層級指定指令,則可以使用預設伺服器的值。詳細資訊在「虛擬伺服器選取」章節中提供。
語法 |
limit_except |
---|---|
預設 | — |
上下文 |
location |
限制位置內允許的 HTTP 方法。 method
參數可以是以下之一:GET
、HEAD
、POST
、PUT
、DELETE
、MKCOL
、COPY
、MOVE
、OPTIONS
、PROPFIND
、PROPPATCH
、LOCK
、UNLOCK
或 PATCH
。允許 GET
方法也會使 HEAD
方法被允許。可以使用 ngx_http_access_module、ngx_http_auth_basic_module 和 ngx_http_auth_jwt_module (1.13.10) 模組指令來限制對其他方法的存取
limit_except GET { allow 192.168.1.0/32; deny all; }
請注意,這將限制對 **除了** GET 和 HEAD 之外的所有方法的存取。
語法 |
limit_rate |
---|---|
預設 |
limit_rate 0; |
上下文 |
http 、server 、location 、if in location |
限制向客戶端傳輸回應的速率。 rate
以每秒位元組數指定。零值會停用速率限制。該限制是針對每個請求設定的,因此如果客戶端同時開啟兩個連線,則總速率將是指定限制的兩倍。
參數值可以包含變數 (1.17.0)。在需要根據特定條件限制速率的情況下,這可能很有用
map $slow $rate { 1 4k; 2 8k; } limit_rate $rate;
也可以在 $limit_rate
變數中設定速率限制,但是,自 1.17.0 版本起,不建議使用此方法
server { if ($slow) { set $limit_rate 4k; } ... }
也可以在代理伺服器回應的 “X-Accel-Limit-Rate” 標頭欄位中設定速率限制。可以使用 proxy_ignore_headers、fastcgi_ignore_headers、uwsgi_ignore_headers 和 scgi_ignore_headers 指令停用此功能。
語法 |
limit_rate_after |
---|---|
預設 |
limit_rate_after 0; |
上下文 |
http 、server 、location 、if in location |
此指令出現在 0.8.0 版本中。
設定將回應進一步傳輸到客戶端,之後會受到速率限制的初始量。參數值可以包含變數 (1.17.0)。
範例
location /flv/ { flv; limit_rate_after 500k; limit_rate 50k; }
語法 |
lingering_close |
---|---|
預設 |
lingering_close on; |
上下文 |
http , server , location |
此指令出現在 1.1.0 和 1.0.6 版本中。
控制 nginx 如何關閉客戶端連線。
預設值 “on
” 指示 nginx 在完全關閉連線之前 等待 和 處理 來自客戶端的其他資料,但前提是啟發式演算法判斷客戶端可能會傳送更多資料。
值 “always
” 將導致 nginx 無條件地等待和處理其他客戶端資料。
值 “off
” 會告知 nginx 永遠不要等待更多資料,並立即關閉連線。這種行為會破壞協定,在正常情況下不應使用。
若要控制關閉 HTTP/2 連線,必須在 server 層級指定此指令 (1.19.1)。
語法 |
lingering_time |
---|---|
預設 |
lingering_time 30s; |
上下文 |
http , server , location |
當 lingering_close 生效時,此指令會指定 nginx 處理(讀取並忽略)來自用戶端的額外資料的最大時間。超過此時間後,即使有更多資料,連線也會被關閉。
語法 |
lingering_timeout |
---|---|
預設 |
lingering_timeout 5s; |
上下文 |
http , server , location |
當 lingering_close 生效時,此指令會指定等待更多用戶端資料到達的最大等待時間。如果在此時間內未收到資料,連線將會關閉。否則,資料將被讀取並忽略,而 nginx 會再次開始等待更多資料。「等待-讀取-忽略」的循環會重複執行,但不會超過 lingering_time 指令所指定的時間。
語法 |
listen listen listen |
---|---|
預設 |
listen *:80 | *:8000; |
上下文 |
server |
設定伺服器將在其上接受請求的 IP 的 address
和 port
,或 UNIX 網域套接字的 path
。可以指定 address
和 port
兩者,或者僅指定 address
或僅指定 port
。address
也可以是主機名稱,例如:
listen 127.0.0.1:8000; listen 127.0.0.1; listen 8000; listen *:8000; listen localhost:8000;
IPv6 位址 (0.7.36) 以方括號指定
listen [::]:8000; listen [::1];
UNIX 網域套接字 (0.8.21) 以 “unix:
” 前綴指定
listen unix:/var/run/nginx.sock;
如果僅給定 address
,則會使用連接埠 80。
如果沒有此指令,則如果 nginx 以超級使用者權限執行,則使用 *:80
,否則使用 *:8000
。
如果存在 default_server
參數,則會使伺服器成為指定的 address
:port
配對的預設伺服器。如果沒有任何指令具有 default_server
參數,則具有 address
:port
配對的第一個伺服器將成為此配對的預設伺服器。
在 0.8.21 之前的版本中,此參數僅被命名為 default
。
ssl
參數 (0.7.14) 允許指定在此連接埠上接受的所有連線都應在 SSL 模式下工作。這允許更緊湊的 組態,適用於同時處理 HTTP 和 HTTPS 請求的伺服器。
http2
參數 (1.9.5) 設定連接埠接受 HTTP/2 連線。通常,為使此功能生效,也應指定 ssl
參數,但 nginx 也可以設定為在沒有 SSL 的情況下接受 HTTP/2 連線。
此參數已棄用,應改用 http2 指令。
quic
參數 (1.25.0) 設定連接埠接受 QUIC 連線。
proxy_protocol
參數 (1.5.12) 允許指定在此連接埠上接受的所有連線都應使用 PROXY 協定。
自 1.13.11 版起支援 PROXY 協定版本 2。
listen
指令可以具有數個額外參數,這些參數專屬於與套接字相關的系統呼叫。這些參數可以在任何 listen
指令中指定,但對於給定的 address
:port
配對只能指定一次。
在 0.8.21 之前的版本中,它們只能與default
參數一起在listen
指令中指定。
-
setfib
=number
- 此參數 (0.8.44) 會為接聽套接字設定關聯的路由表,FIB(
SO_SETFIB
選項)。目前這僅在 FreeBSD 上有效。 -
fastopen
=number
- 為接聽套接字啟用「TCP 快速開啟」(1.5.8),並限制尚未完成三次交握的連線佇列的最大長度。
除非伺服器可以處理多次接收具有資料的相同 SYN 封包,否則請勿啟用此功能。
-
backlog
=number
- 設定
listen()
呼叫中的backlog
參數,該參數會限制擱置連線佇列的最大長度。預設情況下,在 FreeBSD、DragonFly BSD 和 macOS 上,backlog
設定為 -1,而在其他平台上則設定為 511。 -
rcvbuf
=size
- 為接聽套接字設定接收緩衝區大小(
SO_RCVBUF
選項)。 -
sndbuf
=size
- 為接聽套接字設定傳送緩衝區大小(
SO_SNDBUF
選項)。 -
accept_filter
=filter
- 為接聽套接字設定接受篩選器名稱(
SO_ACCEPTFILTER
選項),該篩選器會在將傳入連線傳遞至accept()
之前對其進行篩選。這僅在 FreeBSD 和 NetBSD 5.0+ 上有效。可能的值包括 dataready 和 httpready。 -
deferred
- 指示在 Linux 上使用延遲的
accept()
(TCP_DEFER_ACCEPT
套接字選項)。 -
bind
- 指示為給定的
address
:port
配對進行個別的bind()
呼叫。這很有用,因為如果有數個具有相同連接埠但位址不同的listen
指令,並且其中一個listen
指令接聽給定連接埠的所有位址 (*:
port
),則 nginx 將僅bind()
到*:
port
。應注意,在這種情況下將會進行getsockname()
系統呼叫,以判斷接受連線的位址。如果使用了setfib
、fastopen
、backlog
、rcvbuf
、sndbuf
、accept_filter
、deferred
、ipv6only
、reuseport
或so_keepalive
參數,則對於給定的address
:port
配對,將始終進行個別的bind()
呼叫。 -
ipv6only
=on
|off
- 此參數 (0.7.42) 會(透過
IPV6_V6ONLY
套接字選項)判斷接聽萬用字元位址[::]
的 IPv6 套接字是僅接受 IPv6 連線,還是同時接受 IPv6 和 IPv4 連線。此參數預設為開啟。它只能在啟動時設定一次。在 1.3.4 版之前,如果省略此參數,則作業系統的設定會對套接字生效。
-
reuseport
- 此參數 (1.9.1) 指示為每個工作進程建立個別的接聽套接字(在 Linux 3.9+ 和 DragonFly BSD 上使用
SO_REUSEPORT
套接字選項,或在 FreeBSD 12+ 上使用SO_REUSEPORT_LB
),允許核心在工作進程之間分配傳入連線。目前這僅在 Linux 3.9+、DragonFly BSD 和 FreeBSD 12+ (1.15.1) 上有效。不適當地使用此選項可能會產生其安全性影響。
-
so_keepalive
=on
|off
|[keepidle
]:[keepintvl
]:[keepcnt
] - 此參數 (1.1.11) 會設定接聽套接字的「TCP keepalive」行為。如果省略此參數,則作業系統的設定會對套接字生效。如果將其設定為值 “
on
”,則會為套接字開啟SO_KEEPALIVE
選項。如果將其設定為值 “off
”,則會為套接字關閉SO_KEEPALIVE
選項。某些作業系統支援使用TCP_KEEPIDLE
、TCP_KEEPINTVL
和TCP_KEEPCNT
套接字選項,以每個套接字為基礎設定 TCP keepalive 參數。在這些系統上(目前為 Linux 2.4+、NetBSD 5+ 和 FreeBSD 9.0-STABLE),可以使用keepidle
、keepintvl
和keepcnt
參數進行設定。可以省略一個或兩個參數,在這種情況下,對應的套接字選項的系統預設設定將會生效。例如:
會將閒置逾時 (so_keepalive=30m::10
TCP_KEEPIDLE
) 設定為 30 分鐘,將探查間隔 (TCP_KEEPINTVL
) 保留在其系統預設值,並將探查計數 (TCP_KEEPCNT
) 設定為 10 次探查。
範例
listen 127.0.0.1 default_server accept_filter=dataready backlog=1024;
語法 |
location [ location |
---|---|
預設 | — |
上下文 |
server 、location |
根據請求 URI 設定組態。
比對是針對正規化的 URI 執行,在解碼以 “%XX
” 形式編碼的文字、解析對相對路徑元件 “.
” 和 “..
” 的參照,以及將兩個或多個相鄰的斜線壓縮為單個斜線之後執行。
位置可以透過前綴字串或正規表示式定義。正規表示式以先前的 “~*
” 修飾符(用於不區分大小寫的比對)或 “~
” 修飾符(用於區分大小寫的比對)指定。若要尋找符合給定請求的位置,nginx 會先檢查使用前綴字串定義的位置(前綴位置)。其中,會選取並記住具有最長比對前綴的位置。然後會檢查正規表示式,依其在組態檔案中出現的順序檢查。正規表示式的搜尋會在第一個比對時終止,並使用對應的組態。如果找不到與正規表示式的比對,則會使用先前記住的前綴位置組態。
location
區塊可以巢狀,但在下面提到的一些例外情況除外。
對於不區分大小寫的作業系統,例如 macOS 和 Cygwin,使用前綴字串比對時會忽略大小寫 (0.7.7)。然而,比較僅限於單一位元組的語系。
正規表示式可以包含捕獲 (0.7.40),這些捕獲之後可以在其他指令中使用。
如果最長匹配的前綴位置具有「^~
」修飾符,則不會檢查正規表示式。
此外,使用「=
」修飾符可以定義 URI 和位置的精確匹配。如果找到精確匹配,搜尋將終止。例如,如果「/
」請求頻繁發生,則定義「location = /
」將加速這些請求的處理,因為搜尋會在第一次比較後立即終止。這樣的location顯然不能包含巢狀的location。
在 0.7.1 到 0.8.41 版本中,如果請求匹配了沒有「=
」和「^~
」修飾符的前綴位置,則搜尋也會終止,並且不會檢查正規表示式。
讓我們用一個例子來說明以上內容
location = / { [ configuration A ] } location / { [ configuration B ] } location /documents/ { [ configuration C ] } location ^~ /images/ { [ configuration D ] } location ~* \.(gif|jpg|jpeg)$ { [ configuration E ] }
「/
」請求將匹配配置 A,「/index.html
」請求將匹配配置 B,「/documents/document.html
」請求將匹配配置 C,「/images/1.gif
」請求將匹配配置 D,「/documents/1.jpg
」請求將匹配配置 E。
「@
」前綴定義一個具名位置。此位置不用於常規請求處理,而是用於請求重定向。它們不能是巢狀結構,也不能包含巢狀位置。
如果位置是由以斜線字元結尾的前綴字串定義的,並且請求由 proxy_pass、fastcgi_pass、uwsgi_pass、scgi_pass、memcached_pass 或 grpc_pass 之一處理,則會執行特殊處理。對於 URI 等於此字串但沒有尾隨斜線的請求,將會返回一個程式碼為 301 的永久重定向,將請求重新導向到附加斜線的 URI。如果不需要這樣做,可以這樣定義 URI 和位置的精確匹配
location /user/ { proxy_pass http://user.example.com; } location = /user { proxy_pass http://login.example.com; }
語法 |
log_not_found |
---|---|
預設 |
log_not_found on; |
上下文 |
http , server , location |
啟用或停用將找不到檔案的錯誤記錄到 error_log。
語法 |
log_subrequest |
---|---|
預設 |
log_subrequest off; |
上下文 |
http , server , location |
啟用或停用將子請求記錄到 access_log。
語法 |
max_ranges |
---|---|
預設 | — |
上下文 |
http , server , location |
此指令出現在 1.1.2 版本中。
限制位元組範圍請求中允許的最大範圍數。超出限制的請求將被視為沒有指定位元組範圍進行處理。預設情況下,範圍數不受限制。零值會完全停用位元組範圍支援。
語法 |
merge_slashes |
---|---|
預設 |
merge_slashes on; |
上下文 |
http , server |
啟用或停用將 URI 中兩個或多個相鄰的斜線壓縮為單個斜線。
請注意,壓縮對於正確匹配前綴字串和正規表示式位置至關重要。如果沒有它,「//scripts/one.php
」請求將無法匹配
location /scripts/ { ... }
並可能被處理為靜態檔案。因此,它會被轉換為「/scripts/one.php
」。
如果 URI 包含 base64 編碼的名稱,則可能需要關閉壓縮,因為 base64 在內部使用「/
」字元。但是,為了安全起見,最好避免關閉壓縮。
如果在 server 層級指定指令,則可以使用預設伺服器的值。詳細資訊在「虛擬伺服器選取」章節中提供。
語法 |
msie_padding |
---|---|
預設 |
msie_padding on; |
上下文 |
http , server , location |
啟用或停用為狀態大於 400 的 MSIE 客戶端的回應新增註解,以將回應大小增加到 512 位元組。
語法 |
msie_refresh |
---|---|
預設 |
msie_refresh off; |
上下文 |
http , server , location |
啟用或停用為 MSIE 客戶端發出重新整理而不是重定向。
語法 |
open_file_cache open_file_cache |
---|---|
預設 |
open_file_cache off; |
上下文 |
http , server , location |
設定一個可以儲存的快取
- 開啟的檔案描述符、它們的大小和修改時間;
- 關於目錄存在性的資訊;
- 檔案查詢錯誤,例如「找不到檔案」、「沒有讀取權限」等等。
錯誤的快取應該由 open_file_cache_errors 指令單獨啟用。
該指令具有以下參數
-
max
- 設定快取中的最大元素數;在快取溢位時,會移除最近最少使用的 (LRU) 元素;
-
inactive
- 定義一個時間,在此時間之後,如果元素在這段時間內未被存取,則會從快取中移除;預設情況下,為 60 秒;
-
off
- 停用快取。
範例
open_file_cache max=1000 inactive=20s; open_file_cache_valid 30s; open_file_cache_min_uses 2; open_file_cache_errors on;
語法 |
open_file_cache_errors |
---|---|
預設 |
open_file_cache_errors off; |
上下文 |
http , server , location |
啟用或停用由 open_file_cache 快取檔案查詢錯誤。
語法 |
open_file_cache_min_uses |
---|---|
預設 |
open_file_cache_min_uses 1; |
上下文 |
http , server , location |
設定由 open_file_cache 指令的 inactive
參數設定的期間內,檔案描述符保留在快取中所需的最小檔案存取 number
次數。
語法 |
open_file_cache_valid |
---|---|
預設 |
open_file_cache_valid 60s; |
上下文 |
http , server , location |
設定 open_file_cache 元素應該驗證的時間。
語法 |
output_buffers |
---|---|
預設 |
output_buffers 2 32k; |
上下文 |
http , server , location |
設定從磁碟讀取回應時使用的緩衝區的 number
和 size
。
在 1.9.5 版本之前,預設值為 1 32k。
語法 |
port_in_redirect |
---|---|
預設 |
port_in_redirect on; |
上下文 |
http , server , location |
啟用或停用在 nginx 發出的 absolute 重定向中指定埠號。
重定向中使用主要伺服器名稱由 server_name_in_redirect 指令控制。
語法 |
postpone_output |
---|---|
預設 |
postpone_output 1460; |
上下文 |
http , server , location |
如果可能,客戶端資料的傳輸將被延遲,直到 nginx 至少有 size
位元組的資料要傳送。零值會停用延遲資料傳輸。
語法 |
read_ahead |
---|---|
預設 |
read_ahead 0; |
上下文 |
http , server , location |
設定在處理檔案時核心的預讀量。
在 Linux 上,使用 posix_fadvise(0, 0, 0, POSIX_FADV_SEQUENTIAL)
系統呼叫,因此 size
參數會被忽略。
在 FreeBSD 上,使用自 FreeBSD 9.0-CURRENT 開始支援的 fcntl(O_READAHEAD,
size
)
系統呼叫。FreeBSD 7 必須進行 修補。
語法 |
recursive_error_pages |
---|---|
預設 |
recursive_error_pages off; |
上下文 |
http , server , location |
啟用或停用使用 error_page 指令執行多次重定向。此類重定向的次數是 有限的。
語法 |
request_pool_size |
---|---|
預設 |
request_pool_size 4k; |
上下文 |
http , server |
允許精確調整每個請求的記憶體分配。此指令對效能的影響最小,通常不應使用。
語法 |
reset_timedout_connection |
---|---|
預設 |
reset_timedout_connection off; |
上下文 |
http , server , location |
啟用或停用重設超時連線和使用非標準程式碼 444 關閉 的連線 (1.15.2)。重設執行方式如下。在關閉 socket 之前,會將 SO_LINGER
選項設定為逾時值 0。當 socket 關閉時,TCP RST 會傳送給客戶端,並且會釋放此 socket 佔用的所有記憶體。這有助於避免將已關閉的 socket 與已填滿的緩衝區長時間保持在 FIN_WAIT1 狀態。
應該注意的是,超時的 keep-alive 連線會正常關閉。
語法 |
resolver |
---|---|
預設 | — |
上下文 |
http , server , location |
設定用於將上游伺服器的名稱解析為位址的名稱伺服器,例如
resolver 127.0.0.1 [::1]:5353;
位址可以指定為網域名稱或 IP 位址,以及可選的埠號 (1.3.1、1.2.2)。如果未指定埠號,則會使用埠號 53。名稱伺服器會以循環方式查詢。
在 1.1.7 版本之前,只能設定單個名稱伺服器。從 1.3.1 和 1.2.2 版本開始支援使用 IPv6 位址指定名稱伺服器。
預設情況下,nginx 在解析時會同時查找 IPv4 和 IPv6 位址。如果不需要查找 IPv4 或 IPv6 位址,則可以指定 ipv4=off
(1.23.1) 或 ipv6=off
參數。
從 1.5.8 版本開始支援將名稱解析為 IPv6 位址。
預設情況下,nginx 會使用回應的 TTL 值快取答案。可選的 valid
參數允許覆蓋它
resolver 127.0.0.1 [::1]:5353 valid=30s;
在 1.1.9 版本之前,無法調整快取時間,nginx 總是將答案快取 5 分鐘。
為了防止 DNS 欺騙,建議在安全的可信任本機網路中設定 DNS 伺服器。
可選的 status_zone
參數 (1.17.1) 允許在指定的 zone
中 收集 DNS 伺服器請求和回應的統計資料。該參數是我們的 商業訂閱 的一部分。
語法 |
resolver_timeout |
---|---|
預設 |
resolver_timeout 30s; |
上下文 |
http , server , location |
設定名稱解析的逾時,例如
resolver_timeout 5s;
語法 |
root |
---|---|
預設 |
root html; |
上下文 |
http 、server 、location 、if in location |
設定請求的根目錄。例如,使用以下配置
location /i/ { root /data/w3; }
將會傳送 /data/w3/i/top.gif
檔案以回應「/i/top.gif
」請求。
路徑
值可以包含變數,但 $document_root
和 $realpath_root
除外。
檔案的路徑僅透過將 URI 新增到 root
指令的值來建構。如果必須修改 URI,則應使用 alias 指令。
語法 |
satisfy |
---|---|
預設 |
satisfy all; |
上下文 |
http , server , location |
如果 ngx_http_access_module、ngx_http_auth_basic_module、ngx_http_auth_request_module 或 ngx_http_auth_jwt_module 模組允許存取,則允許存取,如果全部 (all
) 或至少一個 (any
) 模組允許存取。
範例
location / { satisfy any; allow 192.168.1.0/32; deny all; auth_basic "closed site"; auth_basic_user_file conf/htpasswd; }
語法 |
send_lowat |
---|---|
預設 |
send_lowat 0; |
上下文 |
http , server , location |
如果該指令設定為非零值,nginx 會嘗試透過使用 kqueue 方法的 NOTE_LOWAT
旗標或 SO_SNDLOWAT
socket 選項,將客戶端 socket 上的傳送操作次數降至最低。在這兩種情況下,都會使用指定的 size
。
此指令在 Linux、Solaris 和 Windows 上會被忽略。
語法 |
send_timeout |
---|---|
預設 |
send_timeout 60s; |
上下文 |
http , server , location |
設定將回應傳送給客戶端的逾時。逾時僅在兩個連續的寫入操作之間設定,而不是針對整個回應的傳輸。如果客戶端在此時間內沒有收到任何內容,則連線會關閉。
語法 |
sendfile |
---|---|
預設 |
sendfile off; |
上下文 |
http 、server 、location 、if in location |
啟用或停用使用 sendfile()
。
從 nginx 0.8.12 和 FreeBSD 5.2.1 開始,可以使用 aio 為 sendfile()
預先載入資料
location /video/ { sendfile on; tcp_nopush on; aio on; }
在此配置中,sendfile()
會使用 SF_NODISKIO
旗標呼叫,這會使其不會在磁碟 I/O 上封鎖,而是回報資料不在記憶體中。然後 nginx 會透過讀取一個位元組來啟動非同步資料載入。在第一次讀取時,FreeBSD 核心會將檔案的前 128K 位元組載入記憶體,儘管接下來的讀取只會載入 16K 的區塊。可以使用 read_ahead 指令來變更此設定。
在 1.7.11 版本之前,可以使用 aio sendfile;
啟用預先載入。
語法 |
sendfile_max_chunk |
---|---|
預設 |
sendfile_max_chunk 2m; |
上下文 |
http , server , location |
限制單個 sendfile()
呼叫中可以傳輸的資料量。如果沒有限制,一個快速連線可能會完全佔用 worker 程序。
在 1.21.4 版本之前,預設情況下沒有限制。
語法 |
server { ... } |
---|---|
預設 | — |
上下文 |
http |
設定虛擬伺服器的組態。基於 IP 的 (基於 IP 位址) 和基於名稱的 (基於「Host」請求標頭欄位) 虛擬伺服器之間沒有明確的分隔。相反地,listen 指令描述了應接受伺服器連線的所有位址和埠號,而 server_name 指令則列出了所有伺服器名稱。範例配置在「nginx 如何處理請求」文件中提供。
語法 |
server_name |
---|---|
預設 |
server_name ""; |
上下文 |
server |
設定虛擬伺服器的名稱,例如
server { server_name example.com www.example.com; }
第一個名稱會成為主要伺服器名稱。
伺服器名稱可以包含星號(「*
」),用以取代名稱的第一部分或最後一部分
server { server_name example.com *.example.com www.example.*; }
此類名稱稱為萬用字元名稱。
上述名稱中的前兩個可以合併為一個
server { server_name .example.com; }
伺服器名稱中也可以使用正規表示式,在名稱前加上波浪符號(「~
」)
server { server_name www.example.com ~^www\d+\.example\.com$; }
正規表示式可以包含捕獲組 (0.7.40),之後可在其他指令中使用
server { server_name ~^(www\.)?(.+)$; location / { root /sites/$2; } } server { server_name _; location / { root /sites/default; } }
正規表示式中的具名捕獲組會建立變數 (0.8.25),之後可在其他指令中使用
server { server_name ~^(www\.)?(?<domain>.+)$; location / { root /sites/$domain; } } server { server_name _; location / { root /sites/default; } }
如果指令的參數設定為「$hostname
」(0.9.4),則會插入機器的 hostname。
也可以指定空的伺服器名稱 (0.7.11)
server { server_name www.example.com ""; }
這允許此伺服器處理不帶「Host」標頭欄位的請求,而不是針對給定位址:埠組合的預設伺服器。這是預設設定。
在 0.8.48 之前,預設使用機器的 hostname。
在依名稱搜尋虛擬伺服器時,如果名稱與多個指定的變體相符(例如,萬用字元名稱和正規表示式都相符),將會選取第一個相符的變體,優先順序如下:
- 完全相符的名稱
- 最長的以星號開頭的萬用字元名稱,例如「
*.example.com
」 - 最長的以星號結尾的萬用字元名稱,例如「
mail.*
」 - 第一個相符的正規表示式(依在設定檔中出現的順序)
伺服器名稱的詳細說明在單獨的伺服器名稱文件中提供。
語法 |
server_name_in_redirect |
---|---|
預設 |
server_name_in_redirect off; |
上下文 |
http , server , location |
啟用或停用在 nginx 發出的絕對重新導向中使用server_name指令指定的主要伺服器名稱。停用主要伺服器名稱的使用時,會使用來自「Host」請求標頭欄位的名稱。如果此欄位不存在,則會使用伺服器的 IP 位址。
重新導向中埠的使用由port_in_redirect指令控制。
語法 |
server_names_hash_bucket_size |
---|---|
預設 |
server_names_hash_bucket_size 32|64|128; |
上下文 |
http |
設定伺服器名稱雜湊表的水桶大小。預設值取決於處理器快取線的大小。設定雜湊表的詳細資訊在單獨的文件中提供。
語法 |
server_names_hash_max_size |
---|---|
預設 |
server_names_hash_max_size 512; |
上下文 |
http |
設定伺服器名稱雜湊表的最大size
。設定雜湊表的詳細資訊在單獨的文件中提供。
語法 |
server_tokens |
---|---|
預設 |
server_tokens on; |
上下文 |
http , server , location |
啟用或停用在錯誤頁面和「Server」回應標頭欄位中發出 nginx 版本。
build
參數 (1.11.10) 啟用連同 nginx 版本一起發出建置名稱。
此外,作為我們商業訂閱的一部分,從 1.9.13 版本開始,可以使用帶有變數的 string
明確設定錯誤頁面上的簽名和「Server」回應標頭欄位值。空字串會停用「Server」欄位的發出。
語法 |
subrequest_output_buffer_size |
---|---|
預設 |
subrequest_output_buffer_size 4k|8k; |
上下文 |
http , server , location |
此指令在 1.13.10 版本中出現。
設定用於儲存子請求回應主體的緩衝區的 size
。預設情況下,緩衝區大小等於一個記憶體頁面。這可能是 4K 或 8K,具體取決於平台。但是,可以將其縮小。
此指令僅適用於將回應主體儲存到記憶體中的子請求。例如,此類子請求由SSI建立。
語法 |
tcp_nodelay |
---|---|
預設 |
tcp_nodelay on; |
上下文 |
http , server , location |
啟用或停用 TCP_NODELAY
選項的使用。當連線轉換為保持連線狀態時,會啟用此選項。此外,它會在 SSL 連線、用於非緩衝 Proxy 和用於WebSocket Proxy 時啟用。
語法 |
tcp_nopush |
---|---|
預設 |
tcp_nopush off; |
上下文 |
http , server , location |
在 FreeBSD 上啟用或停用 TCP_NOPUSH
Socket 選項的使用,或在 Linux 上啟用 TCP_CORK
Socket 選項的使用。只有在使用sendfile 時才會啟用這些選項。啟用此選項允許
- 在 Linux 和 FreeBSD 4.* 上,以一個封包傳送回應標頭和檔案的開頭;
- 以完整封包傳送檔案。
語法 |
try_files try_files |
---|---|
預設 | — |
上下文 |
server 、location |
依指定的順序檢查檔案是否存在,並使用第一個找到的檔案進行請求處理;處理會在目前內容中執行。檔案的路徑是根據 root 和 alias 指令,從 file
參數建構的。可以透過在名稱結尾指定斜線來檢查目錄是否存在,例如「$uri/
」。如果找不到任何檔案,則會內部重新導向到最後一個參數中指定的 uri
。例如
location /images/ { try_files $uri /images/default.gif; } location = /images/default.gif { expires 30s; }
最後一個參數也可以指向具名位置,如下列範例所示。從 0.7.51 版本開始,最後一個參數也可以是 code
location / { try_files $uri $uri/index.html $uri.html =404; }
在 Proxy Mongrel 中的範例
location / { try_files /system/maintenance.html $uri $uri/index.html $uri.html @mongrel; } location @mongrel { proxy_pass http://mongrel; }
Drupal/FastCGI 的範例
location / { try_files $uri $uri/ @drupal; } location ~ \.php$ { try_files $uri @drupal; fastcgi_pass ...; fastcgi_param SCRIPT_FILENAME /path/to$fastcgi_script_name; fastcgi_param SCRIPT_NAME $fastcgi_script_name; fastcgi_param QUERY_STRING $args; ... other fastcgi_param's } location @drupal { fastcgi_pass ...; fastcgi_param SCRIPT_FILENAME /path/to/index.php; fastcgi_param SCRIPT_NAME /index.php; fastcgi_param QUERY_STRING q=$uri&$args; ... other fastcgi_param's }
在以下範例中,
location / { try_files $uri $uri/ @drupal; }
try_files
指令等效於
location / { error_page 404 = @drupal; log_not_found off; }
在這裡,
location ~ \.php$ { try_files $uri @drupal; fastcgi_pass ...; fastcgi_param SCRIPT_FILENAME /path/to$fastcgi_script_name; ... }
try_files
會在將請求傳遞到 FastCGI 伺服器之前,檢查 PHP 檔案是否存在。
Wordpress 和 Joomla 的範例
location / { try_files $uri $uri/ @wordpress; } location ~ \.php$ { try_files $uri @wordpress; fastcgi_pass ...; fastcgi_param SCRIPT_FILENAME /path/to$fastcgi_script_name; ... other fastcgi_param's } location @wordpress { fastcgi_pass ...; fastcgi_param SCRIPT_FILENAME /path/to/index.php; ... other fastcgi_param's }
語法 |
types { ... } |
---|---|
預設 |
types { text/html html; image/gif gif; image/jpeg jpg; } |
上下文 |
http , server , location |
將檔案名稱副檔名對應至回應的 MIME 類型。副檔名不區分大小寫。多個副檔名可以對應到一個類型,例如
types { application/octet-stream bin exe dll; application/octet-stream deb; application/octet-stream dmg; }
在 conf/mime.types
檔案中,會隨 nginx 分發一個相當完整的對應表。
為了讓特定位置針對所有請求發出「application/octet-stream
」MIME 類型,可以使用以下設定
location /download/ { types { } default_type application/octet-stream; }
語法 |
types_hash_bucket_size |
---|---|
預設 |
types_hash_bucket_size 64; |
上下文 |
http , server , location |
設定類型雜湊表的水桶大小。設定雜湊表的詳細資訊在單獨的文件中提供。
在 1.5.13 版本之前,預設值取決於處理器快取線的大小。
語法 |
types_hash_max_size |
---|---|
預設 |
types_hash_max_size 1024; |
上下文 |
http , server , location |
設定類型雜湊表的最大size
。設定雜湊表的詳細資訊在單獨的文件中提供。
語法 |
underscores_in_headers |
---|---|
預設 |
underscores_in_headers off; |
上下文 |
http , server |
啟用或停用在用戶端請求標頭欄位中使用底線。停用底線的使用時,名稱包含底線的請求標頭欄位會標記為無效,並受限於ignore_invalid_headers指令。
如果在 server 層級指定指令,則可以使用預設伺服器的值。詳細資訊在「虛擬伺服器選取」章節中提供。
語法 |
variables_hash_bucket_size |
---|---|
預設 |
variables_hash_bucket_size 64; |
上下文 |
http |
設定變數雜湊表的水桶大小。設定雜湊表的詳細資訊在單獨的文件中提供。
語法 |
variables_hash_max_size |
---|---|
預設 |
variables_hash_max_size 1024; |
上下文 |
http |
設定變數雜湊表的最大 size
。設定雜湊表的詳細資訊在單獨的文件中提供。
在 1.5.13 版本之前,預設值為 512。
嵌入變數
ngx_http_core_module
模組支援名稱與 Apache 伺服器變數相符的內嵌變數。首先,這些是代表用戶端請求標頭欄位的變數,例如 $http_user_agent
、$http_cookie
等。此外還有其他變數
$arg_
name
- 請求行中的引數
name
$args
- 請求行中的引數
$binary_remote_addr
- 二進位形式的用戶端位址,對於 IPv4 位址,值的長度始終為 4 個位元組,對於 IPv6 位址,則為 16 個位元組
$body_bytes_sent
- 傳送給用戶端的位元組數,不包括回應標頭;此變數與
mod_log_config
Apache 模組的「%B
」參數相容 $bytes_sent
- 傳送給用戶端的位元組數 (1.3.8, 1.2.5)
$connection
- 連線序號 (1.3.8, 1.2.5)
$connection_requests
- 透過連線進行的目前請求數 (1.3.8, 1.2.5)
$connection_time
- 以秒為單位、解析度為毫秒的連線時間 (1.19.10)
$content_length
- 「Content-Length」請求標頭欄位
$content_type
- 「Content-Type」請求標頭欄位
name
Cookie$document_root
- 目前請求的 root 或 alias 指令的值
$document_uri
- 與
$uri
相同 $host
- 依此優先順序:請求行中的主機名稱,或來自「Host」請求標頭欄位的主機名稱,或與請求相符的伺服器名稱
$hostname
- 主機名稱
$http_
name
- 任意請求標頭欄位;變數名稱的最後一部分是轉換為小寫且破折號取代為底線的欄位名稱
$https
- 如果連線在 SSL 模式下運作,則為「
on
」,否則為空字串 $is_args
- 如果請求行有引數,則為「
?
」,否則為空字串 $limit_rate
- 設定此變數會啟用回應速率限制;請參閱limit_rate
$msec
- 目前時間(以秒為單位,解析度為毫秒)(1.3.9, 1.2.6)
$nginx_version
- nginx 版本
$pid
- 工作處理程序的 PID
$pipe
- 如果請求為管線化,則為「
p
」,否則為「.
」(1.3.12, 1.2.7) $proxy_protocol_addr
- 來自 PROXY 通訊協定標頭的用戶端位址 (1.5.12)
PROXY 通訊協定必須先在listen指令中設定
proxy_protocol
參數啟用。 $proxy_protocol_port
- 來自 PROXY 通訊協定標頭的用戶端埠 (1.11.0)
PROXY 通訊協定必須先在listen指令中設定
proxy_protocol
參數啟用。 $proxy_protocol_server_addr
- 來自 PROXY 通訊協定標頭的伺服器位址 (1.17.6)
PROXY 通訊協定必須先在listen指令中設定
proxy_protocol
參數啟用。 $proxy_protocol_server_port
- 來自 PROXY 通訊協定標頭的伺服器埠 (1.17.6)
PROXY 通訊協定必須先在listen指令中設定
proxy_protocol
參數啟用。 $proxy_protocol_tlv_
name
- 來自 PROXY 通訊協定標頭的 TLV (1.23.2)。
name
可以是 TLV 類型名稱或其數值。在後一種情況下,該值是十六進位的,應加上0x
前綴
也可以透過 TLV 類型名稱或其數值來存取 SSL TLV,兩者都以$proxy_protocol_tlv_alpn $proxy_protocol_tlv_0x01
ssl_
作為前綴$proxy_protocol_tlv_ssl_version $proxy_protocol_tlv_ssl_0x21
支援以下 TLV 類型名稱
-
alpn
(0x01
) - 連線上使用的上層通訊協定 -
authority
(0x02
) - 用戶端傳遞的主機名稱值 -
unique_id
(0x05
) - 唯一連線 ID -
netns
(0x30
) - 命名空間的名稱 -
ssl
(0x20
) - 二進位 SSL TLV 結構
支援以下 SSL TLV 類型名稱
-
ssl_version
(0x21
) - 用戶端連線中使用的 SSL 版本 -
ssl_cn
(0x22
) - SSL 憑證通用名稱 -
ssl_cipher
(0x23
) - 使用的密碼名稱 -
ssl_sig_alg
(0x24
) - 用於簽署憑證的演算法 -
ssl_key_alg
(0x25
) - 公開金鑰演算法
此外,還支援以下特殊 SSL TLV 類型名稱
-
ssl_verify
- 用戶端 SSL 憑證驗證結果,如果用戶端呈現憑證並且已成功驗證,則為0
,否則為非零值。
PROXY 通訊協定必須先在listen指令中設定
proxy_protocol
參數啟用。 -
$query_string
- 與
$args
相同 $realpath_root
- 對應於目前請求的 root 或 alias 指令值的絕對路徑名稱,所有符號連結都會解析為實際路徑
$remote_addr
- 用戶端位址
$remote_port
- 用戶端連接埠
$remote_user
- 使用基本驗證提供的使用者名稱
$request
- 完整的原始請求行
$request_body
- 請求主體
當請求主體被讀取到記憶體緩衝區時,變數的值在 proxy_pass、 fastcgi_pass、uwsgi_pass 和 scgi_pass 指令處理的位置中可用。
$request_body_file
- 帶有請求主體的臨時檔案名稱
在處理結束時,需要移除該檔案。若要始終將請求主體寫入檔案,則需要啟用client_body_in_file_only。當臨時檔案的名稱在代理請求或對 FastCGI/uwsgi/SCGI 伺服器的請求中傳遞時,應分別通過 proxy_pass_request_body off、 fastcgi_pass_request_body off、 uwsgi_pass_request_body off 或 scgi_pass_request_body off 指令來禁用請求主體的傳遞。
$request_completion
- 如果請求已完成,則為 “
OK
”,否則為空字串 $request_filename
- 基於 root 或 alias 指令以及請求 URI 的目前請求的檔案路徑
$request_id
- 由 16 個隨機位元組生成的唯一請求標識符,以十六進位制表示 (1.11.0)
$request_length
- 請求長度(包括請求行、標頭和請求主體)(1.3.12, 1.2.7)
$request_method
- 請求方法,通常是 “
GET
” 或 “POST
” $request_time
- 請求處理時間,以秒為單位,精確到毫秒 (1.3.9, 1.2.6);自從從用戶端讀取第一個位元組後經過的時間
$request_uri
- 完整的原始請求 URI (帶參數)
$scheme
- 請求方案, “
http
” 或 “https
” $sent_http_
name
- 任意響應標頭欄位;變數名稱的最後一部分是欄位名稱轉換為小寫,並將破折號替換為底線
$sent_trailer_
name
- 在響應末尾傳送的任意欄位 (1.13.2);變數名稱的最後一部分是欄位名稱轉換為小寫,並將破折號替換為底線
$server_addr
- 接受請求的伺服器的位址
計算此變數的值通常需要一個系統呼叫。為避免系統呼叫,listen 指令必須指定位址並使用
bind
參數。 $server_name
- 接受請求的伺服器的名稱
$server_port
- 接受請求的伺服器的連接埠
$server_protocol
- 請求協定,通常為 “
HTTP/1.0
”、“HTTP/1.1
”、“HTTP/2.0” 或 “HTTP/3.0” $status
- 響應狀態 (1.3.2, 1.2.2)
-
$tcpinfo_rtt
、$tcpinfo_rttvar
、$tcpinfo_snd_cwnd
、$tcpinfo_rcv_space
- 有關用戶端 TCP 連線的資訊;在支援
TCP_INFO
socket 選項的系統上可用 $time_iso8601
- ISO 8601 標準格式的當地時間 (1.3.12, 1.2.7)
$time_local
- 通用日誌格式的當地時間 (1.3.12, 1.2.7)
$uri
- 請求中目前的 URI,已正規化
$uri
的值可能會在請求處理期間變更,例如,當執行內部重定向或使用索引檔案時。