模組 ngx_http_core_module

指令
     absolute_redirect
     aio
     aio_write
     alias
     auth_delay
     chunked_transfer_encoding
     client_body_buffer_size
     client_body_in_file_only
     client_body_in_single_buffer
     client_body_temp_path
     client_body_timeout
     client_header_buffer_size
     client_header_timeout
     client_max_body_size
     connection_pool_size
     default_type
     directio
     directio_alignment
     disable_symlinks
     error_page
     etag
     http
     if_modified_since
     ignore_invalid_headers
     internal
     keepalive_disable
     keepalive_requests
     keepalive_time
     keepalive_timeout
     large_client_header_buffers
     limit_except
     limit_rate
     limit_rate_after
     lingering_close
     lingering_time
     lingering_timeout
     listen
     location
     log_not_found
     log_subrequest
     max_ranges
     merge_slashes
     msie_padding
     msie_refresh
     open_file_cache
     open_file_cache_errors
     open_file_cache_min_uses
     open_file_cache_valid
     output_buffers
     port_in_redirect
     postpone_output
     read_ahead
     recursive_error_pages
     request_pool_size
     reset_timedout_connection
     resolver
     resolver_timeout
     root
     satisfy
     send_lowat
     send_timeout
     sendfile
     sendfile_max_chunk
     server
     server_name
     server_name_in_redirect
     server_names_hash_bucket_size
     server_names_hash_max_size
     server_tokens
     subrequest_output_buffer_size
     tcp_nodelay
     tcp_nopush
     try_files
     types
     types_hash_bucket_size
     types_hash_max_size
     underscores_in_headers
     variables_hash_bucket_size
     variables_hash_max_size
嵌入變數

指令

語法 absolute_redirect on | off;
預設
absolute_redirect on;
上下文 http, server, location

此指令出現在 1.11.8 版本中。

如果停用,nginx 發出的重新導向將會是相對的。

另請參閱 server_name_in_redirectport_in_redirect 指令。

語法 aio on | off | threads[=pool];
預設
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 組態參數啟用。目前,多執行緒僅與 epollkqueueeventport 方法相容。檔案的多執行緒傳送僅在 Linux 上受支援。

另請參閱 sendfile 指令。

語法 aio_write on | off;
預設
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 on | off;
預設
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 on | clean | off;
預設
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 on | off;
預設
client_body_in_single_buffer off;
上下文 http, server, location

決定 nginx 是否應該將整個用戶端請求主體儲存到單一緩衝區中。建議在使用 $request_body 變數時使用此指令,以節省涉及的複製操作次數。

語法 client_body_temp_path 路徑 [level1 [level2 [level3]]];
預設
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 MIME 類型;
預設
default_type text/plain;
上下文 http, server, location

定義回應的預設 MIME 類型。檔案名稱副檔名到 MIME 類型的對應可以使用 types 指令設定。

語法 directio 大小 | off;
預設
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 off;
disable_symlinks on | if_not_owner [from=部分];
預設
disable_symlinks off;
上下文 http, server, location

此指令出現在 1.1.15 版本中。

決定開啟檔案時應如何處理符號連結。

off
允許路徑名稱中的符號連結,且不進行檢查。這是預設行為。
on
如果路徑名稱的任何元件是符號連結,則拒絕存取檔案。
if_not_owner
如果路徑名稱的任何元件是符號連結,且連結和連結指向的物件具有不同的擁有者,則拒絕存取檔案。
from=部分
當檢查符號連結(參數 onif_not_owner)時,通常會檢查路徑名稱的所有組成部分。可以透過額外指定 from=part 參數來避免檢查路徑名稱初始部分的符號連結。在這種情況下,只會從指定的初始部分之後的路徑名稱組成部分開始檢查符號連結。如果該值不是被檢查路徑名稱的初始部分,則會像完全沒有指定此參數一樣檢查整個路徑名稱。如果該值與整個檔名相符,則不會檢查符號連結。參數值可以包含變數。

範例

disable_symlinks on from=$document_root;

此指令僅在具有 openat()fstatat() 介面的系統上可用。這類系統包括 FreeBSD、Linux 和 Solaris 的現代版本。

參數 onif_not_owner 會增加處理負擔。

在不支援僅為搜尋開啟目錄的系統上,要使用這些參數,需要工作程序對所有被檢查的目錄具有讀取權限。

ngx_http_autoindex_modulengx_http_random_index_modulengx_http_dav_module 模組目前會忽略此指令。

語法 error_page code ... [=[response]] uri;
預設
上下文 httpserverlocationif 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 on | off;
預設
etag on;
上下文 http, server, location

此指令出現在 1.3.3 版本中。

啟用或停用靜態資源的 “ETag” 回應標頭欄位的自動生成。

語法 http { ... }
預設
上下文 main

提供指定 HTTP 伺服器指令的組態檔內容。

語法 if_modified_since off | exact | before;
預設
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 on | off;
預設
ignore_invalid_headers on;
上下文 http, server

控制是否應忽略具有無效名稱的標頭欄位。有效名稱由英文字母、數字、連字符和可能底線(由 underscores_in_headers 指令控制)組成。

如果在 server 層級指定指令,則可以使用預設伺服器的值。詳細資訊在「虛擬伺服器選取」章節中提供。

語法 internal;
預設
上下文 location

指定給定的位置只能用於內部請求。對於外部請求,會返回客戶端錯誤 404(找不到)。內部請求如下:

範例

error_page 404 /404.html;

location = /404.html {
    internal;
}

每個請求的內部重新導向次數限制為 10 次,以防止在不正確的組態中發生請求處理迴圈。如果達到此限制,則會返回錯誤 500(伺服器內部錯誤)。在這種情況下,可以在錯誤日誌中看到「重新導向或內部重新導向循環」訊息。

語法 keepalive_disable none | browser ...;
預設
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 number;
預設
keepalive_requests 1000;
上下文 http, server, location

此指令出現在 0.8.0 版本中。

設定可透過單個 keep-alive 連線服務的最大請求數。在達到最大請求數後,會關閉連線。

定期關閉連線對於釋放每個連線的記憶體配置是必要的。因此,使用過高的最大請求數可能會導致過度記憶體使用,不建議這樣做。

在 1.19.10 版本之前,預設值為 100。

語法 keepalive_time time;
預設
keepalive_time 1h;
上下文 http, server, location

此指令出現在 1.19.10 版本中。

限制透過單個 keep-alive 連線處理請求的最大時間。達到此時間後,會在後續請求處理後關閉連線。

語法 keepalive_timeout timeout [header_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 number size;
預設
large_client_header_buffers 4 8k;
上下文 http, server

設定用於讀取大型客戶端請求標頭的緩衝區的最大 numbersize。請求行不能超過一個緩衝區的大小,否則會向客戶端返回 414(請求 URI 過大)錯誤。請求標頭欄位也不能超過一個緩衝區的大小,否則會向客戶端返回 400(錯誤請求)錯誤。緩衝區僅按需分配。預設情況下,緩衝區大小等於 8K 位元組。如果在請求處理結束後將連線轉換為 keep-alive 狀態,則會釋放這些緩衝區。

如果在 server 層級指定指令,則可以使用預設伺服器的值。詳細資訊在「虛擬伺服器選取」章節中提供。

語法 limit_except method ... { ... }
預設
上下文 location

限制位置內允許的 HTTP 方法。 method 參數可以是以下之一:GETHEADPOSTPUTDELETEMKCOLCOPYMOVEOPTIONSPROPFINDPROPPATCHLOCKUNLOCKPATCH。允許 GET 方法也會使 HEAD 方法被允許。可以使用 ngx_http_access_modulengx_http_auth_basic_modulengx_http_auth_jwt_module (1.13.10) 模組指令來限制對其他方法的存取

limit_except GET {
    allow 192.168.1.0/32;
    deny  all;
}

請注意,這將限制對 **除了** GET 和 HEAD 之外的所有方法的存取。

語法 limit_rate rate;
預設
limit_rate 0;
上下文 httpserverlocationif 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_headersfastcgi_ignore_headersuwsgi_ignore_headersscgi_ignore_headers 指令停用此功能。

語法 limit_rate_after size;
預設
limit_rate_after 0;
上下文 httpserverlocationif in location

此指令出現在 0.8.0 版本中。

設定將回應進一步傳輸到客戶端,之後會受到速率限制的初始量。參數值可以包含變數 (1.17.0)。

範例

location /flv/ {
    flv;
    limit_rate_after 500k;
    limit_rate       50k;
}

語法 lingering_close off | on | always;
預設
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 time;
預設
lingering_time 30s;
上下文 http, server, location

lingering_close 生效時,此指令會指定 nginx 處理(讀取並忽略)來自用戶端的額外資料的最大時間。超過此時間後,即使有更多資料,連線也會被關閉。

語法 lingering_timeout time;
預設
lingering_timeout 5s;
上下文 http, server, location

lingering_close 生效時,此指令會指定等待更多用戶端資料到達的最大等待時間。如果在此時間內未收到資料,連線將會關閉。否則,資料將被讀取並忽略,而 nginx 會再次開始等待更多資料。「等待-讀取-忽略」的循環會重複執行,但不會超過 lingering_time 指令所指定的時間。

語法 listen address[:port] [default_server] [ssl] [http2 | quic] [proxy_protocol] [setfib=number] [fastopen=number] [backlog=number] [rcvbuf=size] [sndbuf=size] [accept_filter=filter] [deferred] [bind] [ipv6only=on|off] [reuseport] [so_keepalive=on|off|[keepidle]:[keepintvl]:[keepcnt]];
listen port [default_server] [ssl] [http2 | quic] [proxy_protocol] [setfib=number] [fastopen=number] [backlog=number] [rcvbuf=size] [sndbuf=size] [accept_filter=filter] [deferred] [bind] [ipv6only=on|off] [reuseport] [so_keepalive=on|off|[keepidle]:[keepintvl]:[keepcnt]];
listen unix:path [default_server] [ssl] [http2 | quic] [proxy_protocol] [backlog=number] [rcvbuf=size] [sndbuf=size] [accept_filter=filter] [deferred] [bind] [so_keepalive=on|off|[keepidle]:[keepintvl]:[keepcnt]];
預設
listen *:80 | *:8000;
上下文 server

設定伺服器將在其上接受請求的 IP 的 addressport,或 UNIX 網域套接字的 path。可以指定 addressport 兩者,或者僅指定 address 或僅指定 portaddress 也可以是主機名稱,例如:

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+ 上有效。可能的值包括 datareadyhttpready
deferred
指示在 Linux 上使用延遲的 accept()TCP_DEFER_ACCEPT 套接字選項)。
bind
指示為給定的 address:port 配對進行個別的 bind() 呼叫。這很有用,因為如果有數個具有相同連接埠但位址不同的 listen 指令,並且其中一個 listen 指令接聽給定連接埠的所有位址 (*:port),則 nginx 將僅 bind()*:port。應注意,在這種情況下將會進行 getsockname() 系統呼叫,以判斷接受連線的位址。如果使用了 setfibfastopenbacklogrcvbufsndbufaccept_filterdeferredipv6onlyreuseportso_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_KEEPIDLETCP_KEEPINTVLTCP_KEEPCNT 套接字選項,以每個套接字為基礎設定 TCP keepalive 參數。在這些系統上(目前為 Linux 2.4+、NetBSD 5+ 和 FreeBSD 9.0-STABLE),可以使用 keepidlekeepintvlkeepcnt 參數進行設定。可以省略一個或兩個參數,在這種情況下,對應的套接字選項的系統預設設定將會生效。例如:
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 [ = | ~ | ~* | ^~ ] uri { ... }
location @name { ... }
預設
上下文 serverlocation

根據請求 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_passfastcgi_passuwsgi_passscgi_passmemcached_passgrpc_pass 之一處理,則會執行特殊處理。對於 URI 等於此字串但沒有尾隨斜線的請求,將會返回一個程式碼為 301 的永久重定向,將請求重新導向到附加斜線的 URI。如果不需要這樣做,可以這樣定義 URI 和位置的精確匹配

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

location = /user {
    proxy_pass http://login.example.com;
}

語法 log_not_found on | off;
預設
log_not_found on;
上下文 http, server, location

啟用或停用將找不到檔案的錯誤記錄到 error_log

語法 log_subrequest on | off;
預設
log_subrequest off;
上下文 http, server, location

啟用或停用將子請求記錄到 access_log

語法 max_ranges number;
預設
上下文 http, server, location

此指令出現在 1.1.2 版本中。

限制位元組範圍請求中允許的最大範圍數。超出限制的請求將被視為沒有指定位元組範圍進行處理。預設情況下,範圍數不受限制。零值會完全停用位元組範圍支援。

語法 merge_slashes on | off;
預設
merge_slashes on;
上下文 http, server

啟用或停用將 URI 中兩個或多個相鄰的斜線壓縮為單個斜線。

請注意,壓縮對於正確匹配前綴字串和正規表示式位置至關重要。如果沒有它,「//scripts/one.php」請求將無法匹配

location /scripts/ {
    ...
}

並可能被處理為靜態檔案。因此,它會被轉換為「/scripts/one.php」。

如果 URI 包含 base64 編碼的名稱,則可能需要關閉壓縮,因為 base64 在內部使用「/」字元。但是,為了安全起見,最好避免關閉壓縮。

如果在 server 層級指定指令,則可以使用預設伺服器的值。詳細資訊在「虛擬伺服器選取」章節中提供。

語法 msie_padding on | off;
預設
msie_padding on;
上下文 http, server, location

啟用或停用為狀態大於 400 的 MSIE 客戶端的回應新增註解,以將回應大小增加到 512 位元組。

語法 msie_refresh on | off;
預設
msie_refresh off;
上下文 http, server, location

啟用或停用為 MSIE 客戶端發出重新整理而不是重定向。

語法 open_file_cache off;
open_file_cache max=N [inactive=time];
預設
open_file_cache off;
上下文 http, server, location

設定一個可以儲存的快取

該指令具有以下參數

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 on | off;
預設
open_file_cache_errors off;
上下文 http, server, location

啟用或停用由 open_file_cache 快取檔案查詢錯誤。

語法 open_file_cache_min_uses number;
預設
open_file_cache_min_uses 1;
上下文 http, server, location

設定由 open_file_cache 指令的 inactive 參數設定的期間內,檔案描述符保留在快取中所需的最小檔案存取 number 次數。

語法 open_file_cache_valid time;
預設
open_file_cache_valid 60s;
上下文 http, server, location

設定 open_file_cache 元素應該驗證的時間。

語法 output_buffers number size;
預設
output_buffers 2 32k;
上下文 http, server, location

設定從磁碟讀取回應時使用的緩衝區的 numbersize

在 1.9.5 版本之前,預設值為 1 32k。

語法 port_in_redirect on | off;
預設
port_in_redirect on;
上下文 http, server, location

啟用或停用在 nginx 發出的 absolute 重定向中指定埠號。

重定向中使用主要伺服器名稱由 server_name_in_redirect 指令控制。

語法 postpone_output size;
預設
postpone_output 1460;
上下文 http, server, location

如果可能,客戶端資料的傳輸將被延遲,直到 nginx 至少有 size 位元組的資料要傳送。零值會停用延遲資料傳輸。

語法 read_ahead size;
預設
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 on | off;
預設
recursive_error_pages off;
上下文 http, server, location

啟用或停用使用 error_page 指令執行多次重定向。此類重定向的次數是 有限的

語法 request_pool_size size;
預設
request_pool_size 4k;
上下文 http, server

允許精確調整每個請求的記憶體分配。此指令對效能的影響最小,通常不應使用。

語法 reset_timedout_connection on | off;
預設
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 address ... [valid=time] [ipv4=on|off] [ipv6=on|off] [status_zone=zone];
預設
上下文 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 time;
預設
resolver_timeout 30s;
上下文 http, server, location

設定名稱解析的逾時,例如

resolver_timeout 5s;

語法 root path;
預設
root html;
上下文 httpserverlocationif in location

設定請求的根目錄。例如,使用以下配置

location /i/ {
    root /data/w3;
}

將會傳送 /data/w3/i/top.gif 檔案以回應「/i/top.gif」請求。

路徑 值可以包含變數,但 $document_root$realpath_root 除外。

檔案的路徑僅透過將 URI 新增到 root 指令的值來建構。如果必須修改 URI,則應使用 alias 指令。

語法 satisfy all | any;
預設
satisfy all;
上下文 http, server, location

如果 ngx_http_access_modulengx_http_auth_basic_modulengx_http_auth_request_modulengx_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 size;
預設
send_lowat 0;
上下文 http, server, location

如果該指令設定為非零值,nginx 會嘗試透過使用 kqueue 方法的 NOTE_LOWAT 旗標或 SO_SNDLOWAT socket 選項,將客戶端 socket 上的傳送操作次數降至最低。在這兩種情況下,都會使用指定的 size

此指令在 Linux、Solaris 和 Windows 上會被忽略。

語法 send_timeout time;
預設
send_timeout 60s;
上下文 http, server, location

設定將回應傳送給客戶端的逾時。逾時僅在兩個連續的寫入操作之間設定,而不是針對整個回應的傳輸。如果客戶端在此時間內沒有收到任何內容,則連線會關閉。

語法 sendfile on | off;
預設
sendfile off;
上下文 httpserverlocationif in location

啟用或停用使用 sendfile()

從 nginx 0.8.12 和 FreeBSD 5.2.1 開始,可以使用 aiosendfile() 預先載入資料

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 size;
預設
sendfile_max_chunk 2m;
上下文 http, server, location

限制單個 sendfile() 呼叫中可以傳輸的資料量。如果沒有限制,一個快速連線可能會完全佔用 worker 程序。

在 1.21.4 版本之前,預設情況下沒有限制。

語法 server { ... }
預設
上下文 http

設定虛擬伺服器的組態。基於 IP 的 (基於 IP 位址) 和基於名稱的 (基於「Host」請求標頭欄位) 虛擬伺服器之間沒有明確的分隔。相反地,listen 指令描述了應接受伺服器連線的所有位址和埠號,而 server_name 指令則列出了所有伺服器名稱。範例配置在「nginx 如何處理請求」文件中提供。

語法 server_name 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。

在依名稱搜尋虛擬伺服器時,如果名稱與多個指定的變體相符(例如,萬用字元名稱和正規表示式都相符),將會選取第一個相符的變體,優先順序如下:

  1. 完全相符的名稱
  2. 最長的以星號開頭的萬用字元名稱,例如「*.example.com
  3. 最長的以星號結尾的萬用字元名稱,例如「mail.*
  4. 第一個相符的正規表示式(依在設定檔中出現的順序)

伺服器名稱的詳細說明在單獨的伺服器名稱文件中提供。

語法 server_name_in_redirect on | off;
預設
server_name_in_redirect off;
上下文 http, server, location

啟用或停用在 nginx 發出的絕對重新導向中使用server_name指令指定的主要伺服器名稱。停用主要伺服器名稱的使用時,會使用來自「Host」請求標頭欄位的名稱。如果此欄位不存在,則會使用伺服器的 IP 位址。

重新導向中埠的使用由port_in_redirect指令控制。

語法 server_names_hash_bucket_size size;
預設
server_names_hash_bucket_size 32|64|128;
上下文 http

設定伺服器名稱雜湊表的水桶大小。預設值取決於處理器快取線的大小。設定雜湊表的詳細資訊在單獨的文件中提供。

語法 server_names_hash_max_size size;
預設
server_names_hash_max_size 512;
上下文 http

設定伺服器名稱雜湊表的最大size。設定雜湊表的詳細資訊在單獨的文件中提供。

語法 server_tokens on | off | build | string;
預設
server_tokens on;
上下文 http, server, location

啟用或停用在錯誤頁面和「Server」回應標頭欄位中發出 nginx 版本。

build 參數 (1.11.10) 啟用連同 nginx 版本一起發出建置名稱

此外,作為我們商業訂閱的一部分,從 1.9.13 版本開始,可以使用帶有變數的 string 明確設定錯誤頁面上的簽名和「Server」回應標頭欄位值。空字串會停用「Server」欄位的發出。

語法 subrequest_output_buffer_size size;
預設
subrequest_output_buffer_size 4k|8k;
上下文 http, server, location

此指令在 1.13.10 版本中出現。

設定用於儲存子請求回應主體的緩衝區的 size。預設情況下,緩衝區大小等於一個記憶體頁面。這可能是 4K 或 8K,具體取決於平台。但是,可以將其縮小。

此指令僅適用於將回應主體儲存到記憶體中的子請求。例如,此類子請求由SSI建立。

語法 tcp_nodelay on | off;
預設
tcp_nodelay on;
上下文 http, server, location

啟用或停用 TCP_NODELAY 選項的使用。當連線轉換為保持連線狀態時,會啟用此選項。此外,它會在 SSL 連線、用於非緩衝 Proxy 和用於WebSocket Proxy 時啟用。

語法 tcp_nopush on | off;
預設
tcp_nopush off;
上下文 http, server, location

在 FreeBSD 上啟用或停用 TCP_NOPUSH Socket 選項的使用,或在 Linux 上啟用 TCP_CORK Socket 選項的使用。只有在使用sendfile 時才會啟用這些選項。啟用此選項允許

語法 try_files file ... uri;
try_files file ... =code;
預設
上下文 serverlocation

依指定的順序檢查檔案是否存在,並使用第一個找到的檔案進行請求處理;處理會在目前內容中執行。檔案的路徑是根據 rootalias 指令,從 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 size;
預設
types_hash_bucket_size 64;
上下文 http, server, location

設定類型雜湊表的水桶大小。設定雜湊表的詳細資訊在單獨的文件中提供。

在 1.5.13 版本之前,預設值取決於處理器快取線的大小。

語法 types_hash_max_size size;
預設
types_hash_max_size 1024;
上下文 http, server, location

設定類型雜湊表的最大size。設定雜湊表的詳細資訊在單獨的文件中提供。

語法 underscores_in_headers on | off;
預設
underscores_in_headers off;
上下文 http, server

啟用或停用在用戶端請求標頭欄位中使用底線。停用底線的使用時,名稱包含底線的請求標頭欄位會標記為無效,並受限於ignore_invalid_headers指令。

如果在 server 層級指定指令,則可以使用預設伺服器的值。詳細資訊在「虛擬伺服器選取」章節中提供。

語法 variables_hash_bucket_size size;
預設
variables_hash_bucket_size 64;
上下文 http

設定變數雜湊表的水桶大小。設定雜湊表的詳細資訊在單獨的文件中提供。

語法 variables_hash_max_size 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
目前請求的 rootalias 指令的值
$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 前綴
$proxy_protocol_tlv_alpn
$proxy_protocol_tlv_0x01
也可以透過 TLV 類型名稱或其數值來存取 SSL TLV,兩者都以 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
對應於目前請求的 rootalias 指令值的絕對路徑名稱,所有符號連結都會解析為實際路徑
$remote_addr
用戶端位址
$remote_port
用戶端連接埠
$remote_user
使用基本驗證提供的使用者名稱
$request
完整的原始請求行
$request_body
請求主體

當請求主體被讀取到記憶體緩衝區時,變數的值在 proxy_passfastcgi_passuwsgi_passscgi_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
基於 rootalias 指令以及請求 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 的值可能會在請求處理期間變更,例如,當執行內部重定向或使用索引檔案時。