コア機能

設定例
ディレクティブ
     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 時間;
デフォルト値
accept_mutex_delay 500ms;
コンテキスト events

accept_mutex が有効な場合、別のワーカープロセスが現在新しい接続を受け入れている場合に、ワーカープロセスが新しい接続の受け入れを再開しようとする最大時間を指定します。

構文 daemon on | off;
デフォルト値
daemon on;
コンテキスト メイン

nginx がデーモンになるかどうかを決定します。主に開発中に使用されます。

構文 debug_connection アドレス | 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 変数[=];
デフォルト値
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 ファイル [レベル];
デフォルト値
error_log logs/error.log error;
コンテキスト mainhttpmailstreamserverlocation

ロギングを設定します。同じ設定レベルで複数のログを指定できます (1.5.2)。main 設定レベルでファイルへのログ書き込みが明示的に定義されていない場合、デフォルトファイルが使用されます。

最初の引数は、ログを保存するファイルを定義します。特別な値stderrは標準エラーファイルを選択します。「syslog:」プレフィックスを指定することで、syslogへのロギングを設定できます。「memory:」プレフィックスとバッファサイズを指定することで、循環メモリバッファへのロギングを設定でき、一般的にデバッグに使用されます (1.7.11)。

2 番目の引数はロギングのレベルを決定し、debuginfonoticewarnerrorcritalertemerg のいずれかになります。ログレベルは重大度の昇順にリストされています。特定のログレベルを設定すると、指定されたログレベルとそれ以上の重大度のすべてのメッセージがログに記録されます。たとえば、デフォルトレベルのerrorは、errorcritalertemerg メッセージがログに記録されるようになります。この引数が省略された場合は、error が使用されます。

debug ロギングを機能させるには、nginx を --with-debug でビルドする必要があります。「デバッグログ」を参照してください。

このディレクティブは、バージョン 1.7.11 から stream レベルで、バージョン 1.9.0 から mail レベルで指定できます。

構文 events { ... }
デフォルト値
コンテキスト メイン

接続処理に影響するディレクティブが指定されている設定ファイルのコンテキストを提供します。

構文 include ファイル | マスク;
デフォルト値
コンテキスト 任意

別のファイル、または指定されたマスクに一致するファイルを、設定に含めます。含まれるファイルは、構文的に正しいディレクティブとブロックで構成されている必要があります。

使用例

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 on | off;
デフォルト値
master_process on;
コンテキスト メイン

ワーカープロセスが開始されるかどうかを決定します。このディレクティブは nginx 開発者向けです。

構文 multi_accept on | off;
デフォルト値
multi_accept off;
コンテキスト events

multi_accept が無効な場合、ワーカープロセスは一度に 1 つの新しい接続を受け入れます。それ以外の場合は、ワーカープロセスは一度にすべての新しい接続を受け入れます。

kqueue 接続処理方法が使用されている場合、このディレクティブは無視されます。これは、受け入れ待ちの新しい接続数を報告するためです。

構文 pcre_jit on | off;
デフォルト値
pcre_jit off;
コンテキスト メイン

このディレクティブはバージョン 1.1.12 で追加されました。

設定解析時に認識されている正規表現に対して「Just-In-Time コンパイル」(PCRE JIT) の使用を有効または無効にします。

PCRE JIT は、正規表現の処理速度を大幅に向上させることができます。

JIT は、--enable-jit 設定パラメーターでビルドされたバージョン 8.20 以降の PCRE ライブラリで使用できます。PCRE ライブラリが nginx (--with-pcre=) でビルドされている場合、JIT サポートは --with-pcre-jit 設定パラメーターで有効になります。

構文 pid ファイル;
デフォルト値
pid logs/nginx.pid;
コンテキスト メイン

メインプロセスのプロセスIDを保存するファイルを定義します。

構文 ssl_engine デバイス;
デフォルト値
コンテキスト メイン

ハードウェア SSL アクセラレータの名前を定義します。

構文 thread_pool 名前 threads= [max_queue=];
デフォルト値
thread_pool default threads=32 max_queue=65536;
コンテキスト メイン

このディレクティブはバージョン 1.7.11 で追加されました。

ワーカープロセスをブロックせずにファイルのマルチスレッド読み取りと送信に使用されるスレッドプールの名前とパラメーターを定義します。

threads パラメーターは、プール内のスレッド数を定義します。

プール内のすべてのスレッドがビジー状態の場合、新しいタスクはキューで待ちます。max_queue パラメーターは、キューで待機できるタスクの数を制限します。デフォルトでは、最大 65536 個のタスクがキューで待機できます。キューがオーバーフローすると、タスクはエラーで完了します。

構文 timer_resolution 間隔;
デフォルト値
コンテキスト メイン

ワーカープロセスでのタイマー解像度を下げ、gettimeofday() システムコールの回数を減らします。デフォルトでは、カーネルイベントが受信されるたびに gettimeofday() が呼び出されます。解像度を下げると、gettimeofday() は指定された間隔ごとに 1 回だけ呼び出されます。

timer_resolution 100ms;

間隔の内部実装は、使用される方法によって異なります。

構文 use メソッド;
デフォルト値
コンテキスト events

使用する接続処理メソッドを指定します。nginx はデフォルトで最も効率的なメソッドを使用するため、通常は明示的に指定する必要はありません。

構文 user ユーザー [グループ];
デフォルト値
user nobody nobody;
コンテキスト メイン

ワーカープロセスで使用されるユーザーグループのクレデンシャルを定義します。グループが省略された場合、ユーザーと同じ名前のグループが使用されます。

構文 worker_aio_requests ;
デフォルト値
worker_aio_requests 32;
コンテキスト events

このディレクティブは、バージョン 1.1.4 と 1.0.7 で追加されました。

aioepoll 接続処理方法で使用する場合、単一のワーカープロセスに対する未処理の非同期 I/O 操作の最大を設定します。

構文 worker_connections ;
デフォルト値
worker_connections 512;
コンテキスト events

ワーカープロセスで開くことができる同時接続の最大数を設定します。

この数値には、すべての接続(たとえば、プロキシされたサーバーとの接続など)が含まれ、クライアントとの接続のみが含まれるわけではないことに注意してください。もう 1 つの考慮事項として、実際の同時接続数は、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に、2番目のワーカープロセスをCPU1/CPU3にバインドします。2番目の例は、ハイパースレッディングに適しています。

特別な値auto (1.9.10) を使用すると、利用可能なCPUにワーカープロセスを自動的にバインドできます。

worker_processes auto;
worker_cpu_affinity auto;

オプションのマスクパラメーターを使用して、自動バインディングに使用できるCPUを制限できます。

worker_cpu_affinity auto 01010101;

このディレクティブは、FreeBSDとLinuxでのみ使用できます。

構文 worker_priority ;
デフォルト値
worker_priority 0;
コンテキスト メイン

nice コマンドと同様に、ワーカープロセスのスケジューリング優先度を定義します。負のは、優先度が高いことを意味します。許可される範囲は通常 -20 から 20 です。

worker_priority -10;

構文 worker_processes | auto;
デフォルト値
worker_processes 1;
コンテキスト メイン

ワーカープロセスの数を定義します。

最適な値は、CPUコアの数、データを格納するハードディスクドライブの数、ロードパターンなど、多くの要因によって異なります。疑問がある場合は、利用可能なCPUコアの数に設定することをお勧めします(値「auto」は自動検出を試みます)。

auto パラメーターは、バージョン 1.3.8 および 1.2.5 以降でサポートされています。

構文 worker_rlimit_core サイズ;
デフォルト値
コンテキスト メイン

ワーカープロセスのコアファイルの最大サイズ (RLIMIT_CORE) の制限を変更します。メインプロセスを再起動せずに制限を増やすために使用します。

構文 worker_rlimit_nofile ;
デフォルト値
コンテキスト メイン

ワーカープロセスの最大オープンファイル数(RLIMIT_NOFILE)の制限を変更します。メインプロセスを再起動せずに制限を増やすために使用します。

構文 worker_shutdown_timeout time;
デフォルト値
コンテキスト メイン

このディレクティブはバージョン1.11.11で追加されました。

ワーカープロセスのグレースフルシャットダウンのタイムアウトを設定します。timeが経過すると、nginxはシャットダウンを容易にするために現在開いているすべての接続を閉じようとします。

構文 working_directory directory;
デフォルト値
コンテキスト メイン

ワーカープロセスのカレントワーキングディレクトリを定義します。主にコアファイルの書き込みに使用され、その場合、ワーカープロセスは指定されたディレクトリに対する書き込み権限を持っている必要があります。