核心功能

範例設定
指令
     accept_mutex
     accept_mutex_delay
     daemon
     debug_connection
     debug_points
     env
     error_log
     events
     include
     load_module
     lock_file
     master_process
     multi_accept
     pcre_jit
     pid
     ssl_engine
     thread_pool
     timer_resolution
     use
     user
     worker_aio_requests
     worker_connections
     worker_cpu_affinity
     worker_priority
     worker_processes
     worker_rlimit_core
     worker_rlimit_nofile
     worker_shutdown_timeout
     working_directory

範例設定

user www www;
worker_processes 2;

error_log /var/log/nginx-error.log info;

events {
    use kqueue;
    worker_connections 2048;
}

...

指令

語法 accept_mutex on | off;
預設值
accept_mutex off;
上下文 events

如果啟用 accept_mutex,工作進程將輪流接受新的連線。否則,所有工作進程都將收到新連線的通知,如果新連線的數量很少,某些工作進程可能會浪費系統資源。

在支援 EPOLLEXCLUSIVE 標誌 (1.11.3) 的系統上,或在使用 reuseport 時,無需啟用 accept_mutex

在 1.11.3 版本之前,預設值為 on

語法 accept_mutex_delay time;
預設值
accept_mutex_delay 500ms;
上下文 events

如果啟用 accept_mutex,指定當另一個工作進程正在接受新連線時,一個工作進程嘗試重新開始接受新連線的最大時間。

語法 daemon on | off;
預設值
daemon on;
上下文

決定 nginx 是否應成為守護程式。主要在開發期間使用。

語法 debug_connection address | CIDR | unix:;
預設值
上下文 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 abort | stop;
預設值
上下文

此指令用於偵錯。

當偵測到內部錯誤時,例如工作進程重新啟動時插槽洩漏,啟用 debug_points 會導致建立核心檔案 (abort) 或停止進程 (stop),以便使用系統偵錯工具進行進一步分析。

語法 env variable[=value];
預設值
env TZ;
上下文

預設情況下,nginx 會移除從其父進程繼承的所有環境變數,除了 TZ 變數。此指令允許保留某些繼承的變數、變更其值或建立新的環境變數。這些變數隨後

TZ 變數始終被繼承並可供 ngx_http_perl_module 模組使用,除非明確設定。

使用範例

env MALLOC_OPTIONS;
env PERL5LIB=/data/site/modules;
env OPENSSL_ALLOW_PROXY_CERTS=1;

NGINX 環境變數在內部由 nginx 使用,不應由使用者直接設定。

語法 error_log file [level];
預設值
error_log logs/error.log error;
上下文 mainhttpmailstreamserverlocation

設定記錄。可以在相同的設定層級指定多個日誌 (1.5.2)。如果在 main 設定層級未明確定義將日誌寫入檔案,則將使用預設檔案。

第一個參數定義將儲存日誌的 file。特殊值 stderr 選擇標準錯誤檔案。可以透過指定「syslog:」前綴來設定記錄到 syslog。可以透過指定「memory:」前綴和緩衝區 size 來設定記錄到循環記憶體緩衝區,通常用於偵錯 (1.7.11)。

第二個參數決定記錄的 level,可以是以下其中之一:debuginfonoticewarnerrorcritalertemerg。上面的日誌層級按嚴重性遞增的順序列出。設定某個日誌層級將導致記錄指定和更嚴重的日誌層級的所有訊息。例如,預設層級 error 將導致記錄 errorcritalertemerg 訊息。如果省略此參數,則使用 error

為了使 debug 記錄生效,nginx 需要使用 --with-debug 進行建置,請參閱「偵錯日誌」。

從 1.7.11 版本開始,可以在 stream 層級指定該指令,從 1.9.0 版本開始,可以在 mail 層級指定該指令。

語法 events { ... }
預設值
上下文

提供設定檔上下文,在其中指定影響連線處理的指令。

語法 include file | mask;
預設值
上下文 任何

將另一個 file 或符合指定 mask 的檔案包含到設定中。包含的檔案應包含語法正確的指令和區塊。

使用範例

include mime.types;
include vhosts/*.conf;

語法 load_module file;
預設值
上下文

此指令出現在 1.9.11 版本中。

載入動態模組。

範例

load_module modules/ngx_mail_module.so;

語法 lock_file file;
預設值
lock_file logs/nginx.lock;
上下文

nginx 使用鎖定機制來實作 accept_mutex 並序列化對共用記憶體的存取。在大多數系統上,鎖定是使用原子操作實作的,並且會忽略此指令。在其他系統上,則使用「鎖定檔案」機制。此指令指定鎖定檔案名稱的前綴。

語法 master_process on | off;
預設值
master_process on;
上下文

決定是否啟動工作進程。此指令適用於 nginx 開發人員。

語法 multi_accept on | off;
預設值
multi_accept off;
上下文 events

如果停用 multi_accept,工作進程將一次接受一個新連線。否則,工作進程將一次接受所有新連線。

如果使用 kqueue 連線處理方法,則會忽略此指令,因為它會報告等待接受的新連線數量。

語法 pcre_jit on | off;
預設值
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 file;
預設值
pid logs/nginx.pid;
上下文

定義將儲存主進程的進程 ID 的 file

語法 ssl_engine device;
預設值
上下文

定義硬體 SSL 加速器的名稱。

語法 thread_pool name threads=number [max_queue=number];
預設值
thread_pool default threads=32 max_queue=65536;
上下文

此指令出現在 1.7.11 版本中。

定義用於多執行緒讀取和傳送檔案的執行緒集區的 name 和參數 而不封鎖工作進程。

threads 參數定義集區中的執行緒數。

如果集區中的所有執行緒都忙碌,則新工作將在佇列中等待。max_queue 參數限制允許在佇列中等待的工作數。預設情況下,最多 65536 個工作可以在佇列中等待。當佇列溢位時,工作將完成並出現錯誤。

語法 timer_resolution interval;
預設值
上下文

降低工作進程中的計時器解析度,從而減少進行的 gettimeofday() 系統呼叫數。預設情況下,每次收到核心事件時都會呼叫 gettimeofday()。降低解析度後,只會在指定的 interval 呼叫一次 gettimeofday()

範例

timer_resolution 100ms;

間隔的內部實作取決於使用的方法

語法 use method;
預設值
上下文 events

指定要使用的 連線處理 method。通常無需明確指定,因為 nginx 預設會使用最有效的方法。

語法 user user [group];
預設值
user nobody nobody;
上下文

定義工作進程使用的 usergroup 憑證。如果省略 group,則使用名稱與 user 相同的群組。

語法 worker_aio_requests number;
預設值
worker_aio_requests 32;
上下文 events

此指令出現在 1.1.4 和 1.0.7 版本中。

當搭配 epoll 連線處理方法使用 aio 時,為單個工作進程設定最大 number 個未完成的非同步 I/O 操作。

語法 worker_connections number;
預設值
worker_connections 512;
上下文 events

設定工作進程可以開啟的最大同時連線數。

應該記住,這個數字包括所有連線(例如,與代理伺服器的連線等),而不僅僅是與用戶端的連線。另一個考慮因素是同時連線的實際數量不能超過最大開啟檔案的目前限制,可以使用 worker_rlimit_nofile 變更。

語法 worker_cpu_affinity cpumask ...;
worker_cpu_affinity auto [cpumask];
預設值
上下文

將工作進程綁定到 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 number;
預設值
worker_priority 0;
上下文

定義工作進程的排程優先順序,就像 nice 命令一樣:負數 number 表示更高的優先順序。允許的範圍通常從 -20 到 20 不等。

範例

worker_priority -10;

語法 worker_processes number | auto;
預設值
worker_processes 1;
上下文

定義工作進程的數量。

最佳值取決於許多因素,包括(但不限於)CPU 核心數量、儲存資料的硬碟機數量和負載模式。當不確定時,將其設定為可用的 CPU 核心數量會是一個好的開始(值“auto”將嘗試自動偵測)。

從 1.3.8 和 1.2.5 版本開始支援 auto 參數。

語法 worker_rlimit_core size;
預設值
上下文

變更工作進程的核心檔案 (RLIMIT_CORE) 最大大小限制。用於在不重新啟動主進程的情況下增加限制。

語法 worker_rlimit_nofile number;
預設值
上下文

變更工作進程的最大開啟檔案數 (RLIMIT_NOFILE) 限制。用於在不重新啟動主進程的情況下增加限制。

語法 worker_shutdown_timeout time;
預設值
上下文

此指令出現在 1.11.11 版本中。

設定工作進程正常關閉的逾時時間。當 time 過期時,nginx 將嘗試關閉所有目前開啟的連線,以方便關閉。

語法 working_directory directory;
預設值
上下文

定義工作進程的目前工作目錄。它主要在寫入核心檔案時使用,在這種情況下,工作進程應該具有指定目錄的寫入權限。