原文地址html
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
,則 worker 進程會輪流接受新的鏈接。不然,有新鏈接時,會通知到全部的 worker 進程,而且若是新鏈接的數量不多,某些工做進程可能會浪費系統資源。nginx
在支持 EPOLLEXCLUSIVE 的系統中,或者使用了 reuseport 時,不須要開啓
accept_mutex
。
在 1.11.3 以前的版本,默認值是 on。web
語法: accept_mutex_delay time;
默認值: accept_mutex_delay 500ms;
上下文: events
開啓 accept_mutex
後,指定當另外一個工做進程當前正在接受新鏈接時,工做進程嘗試從新啓動接受新鏈接的最長時間。正則表達式
If accept_mutex is enabled, specifies the maximum time during which a worker process will try to restart accepting new connections if another worker process is currently accepting new connections.sql
語法: daemon on | off;
默認值: daemon on;
上下文: main
肯定 nginx 是否應該成爲守護進程。主要在開發過程當中使用。服務器
語法: debug_connection address | CIDR | unix:;
默認值: —
上下文: events
對指定的客戶鏈接,開啓調試日誌。其餘鏈接會使用由 error_log
指令設置的日誌等級。調試鏈接經過 IPv4 或 IPv6 地址指定,也能夠經過 hostname 指定。對於使用了 UNIX socket 套接字的鏈接,調試日誌用 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
構建時,這個指令才能工做,參考 A debugging log。併發
語法: debug_points abort | stop;
默認值: —
上下文: main
當探測到內部錯誤時(例如工做進程重啓時 socket 套接字泄露),開啓 debug_points 會致使核心文件建立(停止)或中止進程(中止),以便使用系統調試器進行進一步分析。app
語法: env variable[=value];
默認值: env TZ;
上下文: main
默認狀況下,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;
上下文: main, http, mail, stream, server, location
配置日誌記錄。能夠在同一級別上指定多個日誌(1.5.2 版本開始)。若是在 main 配置上下文中未明肯定義日誌寫入哪一個文件,則將使用默認文件。
第一個參數定義了一個將存儲日誌的文件。特殊值 stderr 選擇標準錯誤文件。記錄到 syslog 能夠經過指定「syslog:」前綴進行配置。記錄到循環 內存緩衝區 能夠經過指定「memory:」前綴和緩衝區大小進行配置,一般用於調試(1.7.11)。
第二個參數肯定日誌記錄的級別,能夠是如下其中一個:debug,info,notice,warn,error,crit,alert 或 emerg。上面的日誌級別按照嚴重性增長的順序列出。設置某個日誌級別會致使記錄指定的和更嚴重的日誌級別的全部消息。例如,默認的級別 error 會致使 error,crit,alert 和 emerg 消息被記錄。若是省略此參數,則使用 error。
Nginx 經過 --with-debug
構建時,debug logging 才能工做,參考 A debugging log。
error_log 指令要用在 stream 上下文,須要使用 1.7.11 以後的版本。要用在 mail 上下文,須要使用 1.9.0 以後的版本。
語法: events { ... }
默認值: —
上下文: main
提供配置文件上下文,其中指定影響鏈接處理的指令。
語法: include file | mask;
默認值: —
上下文: any
將另外一個文件或與指定掩碼 mask 匹配的文件包含到配置中。包含的文件應該包含語法正確的指令和塊。
示例:
include mime.types;
include vhosts/*.conf;
語法: load_module file;
默認值: —
上下文: main
加載動態模塊。1.9.11 以後的版本纔可用。
示例:
load_module modules/ngx_mail_module.so;
語法: lock_file file;
默認值: lock_file logs/nginx.lock;
上下文: main
nginx 經過使用鎖機制來實現 accept_mutex 和序列化訪問共享內存。在大多數系統上,鎖使用原子操做來實現,此時該指令被忽略。在其餘系統上使用「lock file」機制。該指令爲鎖文件的名稱指定一個前綴。
語法: master_process on | off;
默認值: master_process on;
上下文: main
肯定工做進程是否已啓動。該指令適用於 nginx 開發人員。
語法: multi_accept on | off;
默認值: multi_accept off;
上下文: events
若是禁用 multi_accept,則工做進程將一次接受一個新鏈接。不然,工做進程將一次接受全部新鏈接。
若是使用 kqueue 鏈接處理方法,該指令將被忽略,由於它會報告等待接受的新鏈接數。
語法: pcre_jit on | off;
默認值: pcre_jit off;
上下文: main
對配置解析時已知的正則表達式啓用或禁用「即時編譯(just-in-time compilation)」(PCRE JIT)。1.1.12 版本以後可用。
PCRE JIT 能夠顯着加快正則表達式的處理速度。
版本高於 8.20,而且使用 --enable-jit
配置參數構建的 PCRE 庫中可以使用 JIT。當使用 nginx(--with-pcre=
)構建 PCRE 庫時,經過 --with-pcre-jit
配置參數啓用 JIT 支持。
語法: pid file;
默認值: pid logs/nginx.pid;
上下文: main
定義用於儲存主進程 PID 的文件。
語法: ssl_engine device; 默認值: — 上下文: main
定義硬件 SSL 加速器的名稱。
語法: thread_pool name threads=number [max_queue=number];
默認值: thread_pool default threads=32 max_queue=65536;
上下文: main
定義命名線程池(named thread pools),用於多線程讀取和發送文件而 不會阻塞 工做進程。1.7.11 以後可用。
threads
參數定義池中的線程數。
在池中的全部線程都忙的狀況下,新任務將在隊列中等待。max_queue
參數限制容許在隊列中等待的任務數量。默認狀況下,最多能夠有 65536 個任務在隊列中等待。當隊列溢出時,任務完成並出現錯誤。
語法: timer_resolution interval; 默認值: — 上下文: main
減小工做進程中的定時器分辨率,從而減小 gettimeofday()
系統調用的次數。默認狀況下,每次收到內核事件時都會調用 gettimeofday()
。在下降分辨率的狀況下,gettimeofday()
僅在每一個指定的時間間隔內調用一次。
示例:
timer_resolution 100ms;
內部實施的時間間隔取決於使用的方法:
EVFILT_TIMER
過濾器timer_create()
setitimer()
語法: use method;
默認值: —
上下文: events
指定要使用的鏈接處理方法。一般不須要明確指定,由於 nginx 將默認使用最有效的方法。
語法: user user [group];
默認值: user nobody nobody;
上下文: main
定義工做進程使用的用戶和組憑據。若是省略組,則使用名稱等於用戶名的組。
語法: worker_aio_requests number;
默認值: worker_aio_requests 32;
上下文: events
與 epoll 鏈接處理方法一塊兒使用 aio 時,爲單個工做進程設置未完成的異步 I/O 操做的最大數量。1.1.4 開始使用。
語法: worker_connections number;
默認值: worker_connections 512;
上下文: events
設置工做進程能夠打開的最大併發鏈接數。
記住,這個數字包括全部鏈接(例如與代理服務器的鏈接等),而不只僅是與客戶的鏈接。另外,同時鏈接的實際數量不能超過當前的最大可打開文件的數量限制,能夠經過 worker_rlimit_nofile 更改。
語法: worker_cpu_affinity cpumask ...;
worker_cpu_affinity auto [cpumask];
默認值: —
上下文: main
將工做進程綁定到一組 CPU。每一個 CPU 集由可用的 CPU 的位掩碼錶示。應該爲每一個工做進程定義一個單獨的集合。默認狀況下,工做進程不綁定到任何特定的 CPU。
示例,將每一個工做進程綁定到獨立 CPU 上:
worker_processes 4; worker_cpu_affinity 0001 0010 0100 1000;
將第一個工做進程綁定到 CPU0/CPU2,第二個工做進程綁定到 CPU3。適用於超線程。:
worker_processes 2; worker_cpu_affinity 0101 1010;
特殊值 auto(1.9.10)自動將工做進程綁定到可用的 CPU:
worker_processes auto;
worker_cpu_affinity auto;
可選的 mask
參數可用於限制可用於自動綁定的 CPU:
worker_cpu_affinity auto 01010101;
這個指令僅在 Linux 和 FreeBSD 系統上可用。
語法: worker_priority number;
默認值: worker_priority 0;
上下文: main
定義工做進程的調度優先級,就像 nice
命令所作的那樣:負數意味着更高的優先級。容許的範圍一般在 -20 到 20 之間變化。
示例:
worker_priority -10;
語法: worker_processes number | auto;
默認值: worker_processes 1;
上下文: main
定義工做進程數量。
最佳值取決於許多因素,包括(但不限於)CPU 內核數量,存儲數據的硬盤驅動器數量以及加載模式。當對此有疑惑時,最佳選擇是將其設置爲可用的 CPU 核心數(值「auto」將嘗試自動檢測它)。
從版本 1.3.8 和 1.2.5 開始支持 auto 參數。
語法: worker_rlimit_core size;
默認值: —
上下文: main
更改工做進程的核心文件最大大小限制(RLIMIT_CORE)。用於在不從新啓動主進程的狀況下增大限制。
語法: worker_rlimit_nofile number;
默認值: —
上下文: main
更改工做進程的最大打開文件數量限制(RLIMIT_NOFILE)。用於在不從新啓動主進程的狀況下增大限制。
語法: worker_shutdown_timeout time;
默認值: —
上下文: main
配置正常關閉工做進程的超時時間。到期時,nginx 將嘗試關閉當前打開的全部鏈接以便關閉工做進程。
這個指令從 1.11.11 以後可用。
語法: working_directory directory; 默認值: — 上下文: main
定義工做進程的當前工做目錄。主要用於編寫核心文件,在這種狀況下,工做進程應該具備指定目錄的寫入權限。