核心功能
範例設定
user www www; worker_processes 2; error_log /var/log/nginx-error.log info; events { use kqueue; worker_connections 2048; } ...
指令
語法 |
accept_mutex |
---|---|
預設值 |
accept_mutex off; |
上下文 |
events |
如果啟用 accept_mutex
,工作進程將輪流接受新的連線。否則,所有工作進程都將收到新連線的通知,如果新連線的數量很少,某些工作進程可能會浪費系統資源。
在支援 EPOLLEXCLUSIVE 標誌 (1.11.3) 的系統上,或在使用 reuseport 時,無需啟用 accept_mutex
。
在 1.11.3 版本之前,預設值為 on
。
語法 |
accept_mutex_delay |
---|---|
預設值 |
accept_mutex_delay 500ms; |
上下文 |
events |
如果啟用 accept_mutex,指定當另一個工作進程正在接受新連線時,一個工作進程嘗試重新開始接受新連線的最大時間。
語法 |
daemon |
---|---|
預設值 |
daemon on; |
上下文 |
主 |
決定 nginx 是否應成為守護程式。主要在開發期間使用。
語法 |
debug_connection |
---|---|
預設值 | — |
上下文 |
events |
啟用選定客戶端連線的偵錯日誌。其他連線將使用 error_log 指令設定的日誌層級。偵錯的連線由 IPv4 或 IPv6 (1.3.0, 1.2.1) 位址或網路指定。也可以使用主機名稱指定連線。對於使用 UNIX 網域插槽 (1.3.0, 1.2.1) 的連線,偵錯日誌由「unix:
」參數啟用。
events { debug_connection 127.0.0.1; debug_connection localhost; debug_connection 192.0.2.0/24; debug_connection ::1; debug_connection 2001:0db8::/32; debug_connection unix:; ... }
為了使此指令生效,nginx 需要使用 --with-debug
進行建置,請參閱「偵錯日誌」。
語法 |
debug_points |
---|---|
預設值 | — |
上下文 |
主 |
此指令用於偵錯。
當偵測到內部錯誤時,例如工作進程重新啟動時插槽洩漏,啟用 debug_points
會導致建立核心檔案 (abort
) 或停止進程 (stop
),以便使用系統偵錯工具進行進一步分析。
語法 |
env |
---|---|
預設值 |
env TZ; |
上下文 |
主 |
預設情況下,nginx 會移除從其父進程繼承的所有環境變數,除了 TZ 變數。此指令允許保留某些繼承的變數、變更其值或建立新的環境變數。這些變數隨後
- 在可執行檔的 即時升級 期間繼承;
- 由 ngx_http_perl_module 模組使用;
- 由工作進程使用。應該記住,以這種方式控制系統程式庫並非總是可行,因為程式庫通常只會在初始化期間檢查變數,遠早於使用此指令進行設定。一個例外是上述的可執行檔 即時升級。
TZ 變數始終被繼承並可供 ngx_http_perl_module 模組使用,除非明確設定。
使用範例
env MALLOC_OPTIONS; env PERL5LIB=/data/site/modules; env OPENSSL_ALLOW_PROXY_CERTS=1;
NGINX 環境變數在內部由 nginx 使用,不應由使用者直接設定。
語法 |
error_log |
---|---|
預設值 |
error_log logs/error.log error; |
上下文 |
main 、http 、mail 、stream 、server 、location |
設定記錄。可以在相同的設定層級指定多個日誌 (1.5.2)。如果在 main
設定層級未明確定義將日誌寫入檔案,則將使用預設檔案。
第一個參數定義將儲存日誌的 file
。特殊值 stderr
選擇標準錯誤檔案。可以透過指定「syslog:
」前綴來設定記錄到 syslog。可以透過指定「memory:
」前綴和緩衝區 size
來設定記錄到循環記憶體緩衝區,通常用於偵錯 (1.7.11)。
第二個參數決定記錄的 level
,可以是以下其中之一:debug
、info
、notice
、warn
、error
、crit
、alert
或 emerg
。上面的日誌層級按嚴重性遞增的順序列出。設定某個日誌層級將導致記錄指定和更嚴重的日誌層級的所有訊息。例如,預設層級 error
將導致記錄 error
、crit
、alert
和 emerg
訊息。如果省略此參數,則使用 error
。
為了使debug
記錄生效,nginx 需要使用--with-debug
進行建置,請參閱「偵錯日誌」。
從 1.7.11 版本開始,可以在stream
層級指定該指令,從 1.9.0 版本開始,可以在
語法 |
events { ... } |
---|---|
預設值 | — |
上下文 |
主 |
提供設定檔上下文,在其中指定影響連線處理的指令。
語法 |
include |
---|---|
預設值 | — |
上下文 |
任何 |
將另一個 file
或符合指定 mask
的檔案包含到設定中。包含的檔案應包含語法正確的指令和區塊。
使用範例
include mime.types; include vhosts/*.conf;
語法 |
load_module |
---|---|
預設值 | — |
上下文 |
主 |
此指令出現在 1.9.11 版本中。
載入動態模組。
範例
load_module modules/ngx_mail_module.so;
語法 |
lock_file |
---|---|
預設值 |
lock_file logs/nginx.lock; |
上下文 |
主 |
nginx 使用鎖定機制來實作 accept_mutex 並序列化對共用記憶體的存取。在大多數系統上,鎖定是使用原子操作實作的,並且會忽略此指令。在其他系統上,則使用「鎖定檔案」機制。此指令指定鎖定檔案名稱的前綴。
語法 |
master_process |
---|---|
預設值 |
master_process on; |
上下文 |
主 |
決定是否啟動工作進程。此指令適用於 nginx 開發人員。
語法 |
multi_accept |
---|---|
預設值 |
multi_accept off; |
上下文 |
events |
如果停用 multi_accept
,工作進程將一次接受一個新連線。否則,工作進程將一次接受所有新連線。
如果使用 kqueue 連線處理方法,則會忽略此指令,因為它會報告等待接受的新連線數量。
語法 |
pcre_jit |
---|---|
預設值 |
pcre_jit off; |
上下文 |
主 |
此指令出現在 1.1.12 版本中。
啟用或停用對設定剖析時已知的正規表示式使用「即時編譯」(PCRE JIT)。
PCRE JIT 可以顯著加快正規表示式的處理速度。
JIT 在使用--enable-jit
設定參數建置的 PCRE 程式庫 8.20 版本開始提供。當 PCRE 程式庫使用 nginx (--with-pcre=
) 建置時,會透過--with-pcre-jit
設定參數啟用 JIT 支援。
語法 |
pid |
---|---|
預設值 |
pid logs/nginx.pid; |
上下文 |
主 |
定義將儲存主進程的進程 ID 的 file
。
語法 |
ssl_engine |
---|---|
預設值 | — |
上下文 |
主 |
定義硬體 SSL 加速器的名稱。
語法 |
thread_pool |
---|---|
預設值 |
thread_pool default threads=32 max_queue=65536; |
上下文 |
主 |
此指令出現在 1.7.11 版本中。
定義用於多執行緒讀取和傳送檔案的執行緒集區的 name
和參數 而不封鎖工作進程。
threads
參數定義集區中的執行緒數。
如果集區中的所有執行緒都忙碌,則新工作將在佇列中等待。max_queue
參數限制允許在佇列中等待的工作數。預設情況下,最多 65536 個工作可以在佇列中等待。當佇列溢位時,工作將完成並出現錯誤。
語法 |
timer_resolution |
---|---|
預設值 | — |
上下文 |
主 |
降低工作進程中的計時器解析度,從而減少進行的 gettimeofday()
系統呼叫數。預設情況下,每次收到核心事件時都會呼叫 gettimeofday()
。降低解析度後,只會在指定的 interval
呼叫一次 gettimeofday()
。
範例
timer_resolution 100ms;
間隔的內部實作取決於使用的方法
- 如果使用
kqueue
,則為EVFILT_TIMER
篩選器; -
如果使用
eventport
,則為timer_create()
; -
否則為
setitimer()
。
語法 |
use |
---|---|
預設值 | — |
上下文 |
events |
指定要使用的 連線處理 method
。通常無需明確指定,因為 nginx 預設會使用最有效的方法。
語法 |
user |
---|---|
預設值 |
user nobody nobody; |
上下文 |
主 |
定義工作進程使用的 user
和 group
憑證。如果省略 group
,則使用名稱與 user
相同的群組。
語法 |
worker_aio_requests |
---|---|
預設值 |
worker_aio_requests 32; |
上下文 |
events |
此指令出現在 1.1.4 和 1.0.7 版本中。
當搭配 epoll 連線處理方法使用 aio 時,為單個工作進程設定最大 number
個未完成的非同步 I/O 操作。
語法 |
worker_connections |
---|---|
預設值 |
worker_connections 512; |
上下文 |
events |
設定工作進程可以開啟的最大同時連線數。
應該記住,這個數字包括所有連線(例如,與代理伺服器的連線等),而不僅僅是與用戶端的連線。另一個考慮因素是同時連線的實際數量不能超過最大開啟檔案的目前限制,可以使用 worker_rlimit_nofile 變更。
語法 |
worker_cpu_affinity worker_cpu_affinity |
---|---|
預設值 | — |
上下文 |
主 |
將工作進程綁定到 CPU 集合。每個 CPU 集合都由允許的 CPU 位元遮罩表示。每個工作進程都應該定義一個單獨的集合。預設情況下,工作進程不會綁定到任何特定的 CPU。
例如,
worker_processes 4; worker_cpu_affinity 0001 0010 0100 1000;
將每個工作進程綁定到一個單獨的 CPU,而
worker_processes 2; worker_cpu_affinity 0101 1010;
將第一個工作進程綁定到 CPU0/CPU2,第二個工作進程綁定到 CPU1/CPU3。第二個範例適用於超執行緒。
特殊值 auto
(1.9.10) 允許將工作進程自動綁定到可用的 CPU
worker_processes auto; worker_cpu_affinity auto;
可選的 mask 參數可用於限制可用於自動綁定的 CPU
worker_cpu_affinity auto 01010101;
此指令僅在 FreeBSD 和 Linux 上可用。
語法 |
worker_priority |
---|---|
預設值 |
worker_priority 0; |
上下文 |
主 |
定義工作進程的排程優先順序,就像 nice
命令一樣:負數 number
表示更高的優先順序。允許的範圍通常從 -20 到 20 不等。
範例
worker_priority -10;
語法 |
worker_processes |
---|---|
預設值 |
worker_processes 1; |
上下文 |
主 |
定義工作進程的數量。
最佳值取決於許多因素,包括(但不限於)CPU 核心數量、儲存資料的硬碟機數量和負載模式。當不確定時,將其設定為可用的 CPU 核心數量會是一個好的開始(值“auto
”將嘗試自動偵測)。
從 1.3.8 和 1.2.5 版本開始支援 auto
參數。
語法 |
worker_rlimit_core |
---|---|
預設值 | — |
上下文 |
主 |
變更工作進程的核心檔案 (RLIMIT_CORE
) 最大大小限制。用於在不重新啟動主進程的情況下增加限制。
語法 |
worker_rlimit_nofile |
---|---|
預設值 | — |
上下文 |
主 |
變更工作進程的最大開啟檔案數 (RLIMIT_NOFILE
) 限制。用於在不重新啟動主進程的情況下增加限制。
語法 |
worker_shutdown_timeout |
---|---|
預設值 | — |
上下文 |
主 |
此指令出現在 1.11.11 版本中。
設定工作進程正常關閉的逾時時間。當 time
過期時,nginx 將嘗試關閉所有目前開啟的連線,以方便關閉。
語法 |
working_directory |
---|---|
預設值 | — |
上下文 |
主 |
定義工作進程的目前工作目錄。它主要在寫入核心檔案時使用,在這種情況下,工作進程應該具有指定目錄的寫入權限。