FAQ

Page Discussion History

CommandLineJa

Nginxにはわずかのコマンドライン・パラメータしかありません。他のソフトウェア・システムと違って、設定はすべて設定ファイルによって行われます(imagine that)。

  • [#options オプション]
  • [#example 実例]
  • [#lncus シグナルを使って新しい設定ファイルを読み込む]
  • [#utnbotf オン・ザ・フライで新しいバイナリにアップグレードする]

Template:Anchor

Contents

オプション

-c </path/to/config> デフォルトの設定ファイル以外のファイルを指定します

-g グローバルな ディレクティブを指定します。 (version >=0.7.4)

-t 起動せず、設定ファイルのテストのみを行います。設定ファイルのシンタックスが正しいかを確認し、次に設定ファイルが参照しているファイルを開こうとします。

-v バージョンを出力します。

-V バージョンを出力し、コンパイラのバージョンとconfigureオプションも出力します。

Template:Anchor

実例

/usr/bin/nginx -t -c ~/mynginx.conf -g "pid /var/run/nginx.pid; worker_processes 2;"

シグナルを使ってNginxを制御する

シグナルを使ってマスター・プロセスの制御を行うことができます。デフォルトでは、nginxはマスター・プロセスのプロセスIDを/usr/local/nginx/logs/nginx.pidに書き込みます。これは、コンパイル時に./configureにパラメータを渡すか、設定ファイルのpidディレクティブを使うことによって変更することができます。

マスター・プロセスは以下のシグナルを処理することができます:

TERM, INT 即座にシャットダウンします
QUIT 緩やかにシャットダウンします
HUP 設定ファイルの再読み込み
新しい設定ファイルで新規ワーカー・プロセスを起動します
古いワーカー・プロセスは緩やかにシャットダウンされます
USR1 ログファイルを開き直します
USR2 実行ファイルをオン・ザ・フライでアップグレードします
WINCH ワーカー・プロセスを上品にシャットダウンします


あなたがワーカー・プロセスを制御する必要はありません。しかしながら、ワーカー・プロセスもいくつかのシグナルをサポートしています:

TERM, INT 即座にシャットダウンします
QUIT 緩やかにシャットダウンします
USR1 ログファイルを開き直します

Template:Anchor

シグナルを使って新しい設定ファイルを読み込む

nginxは実行時にその動作を制御できるようにいくつかのシグナルをサポートしています。

もっとも一般的なものとしては15があります。これは実行中のプロセスを停止させます:

USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root      2213  0.0  0.0   6784  2036 ?        Ss   03:01   0:00 nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf

最も興味深いオプションは、nginxの設定ファイルを実行時に変更することができるというものでしょう(再読み込みする前に設定ファイルのテストを行うことに注意してください)。

2006/09/16 13:07:10 [info]  15686#0: the configuration file /etc/nginx/nginx.conf syntax is ok
2006/09/16 13:07:10 [info]  15686#0: the configuration file /etc/nginx/nginx.conf was tested successfully
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root      2213  0.0  0.0   6784  2036 ?        Ss   03:01   0:00 nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf

ここで起こっているのは、nginxがHUPシグナルを受信すると、nginxは設定ファイル(もし明示的に指定したものがあればそれを、なければデフォルトのものを)の解析を試み、もしエラーがなければ、新しい設定ファイルを適用しようとします(つまり、ログファイルと待ち受けているソケットを再オープンします)。これに成功すると、nginxは新しいワーカー・プロセスを起動し、古いワーカーに緩やかにシャットダウンするようシグナルを送信します。古いワーカーは待ち受けているソケットを閉じますが、処理中のクライアントに対しては要求に応答を続けることに注意してください。すべてのクライアントの要求に応答し終えると、古いワーカーはシャットダウンされます。もし新しい設定ファイルを適用できない場合は、古い設定ファイルのままで動作を続けます。

RequestForReviewCategory -- (Request For Review: Just What Happens With The Worker Processes at a HUP? -Olle)

Template:Anchor

オン・ザ・フライで新しいバイナリにアップグレードする

nginxのバイナリを新しいものに置き換える必要がある時(最新のバージョンにアップグレードした時や、サーバー・モジュールを追加/削除した時)にも、サービスのダウンタイムを発生させることなく行うことができます。受信中のリクエストを失うことはありません。

最初に、古いバイナリを新しいバイナリで置き換えます。それからUSR2シグナルをマスター・プロセスに送出します。マスター・プロセスは.pidファイルを.oldbinに改名し(例えば/usr/local/nginx/logs/nginx.pid.oldbin)、それから新しいバイナリを実行します。これによって、新しいマスター・プロセスとワーカー・プロセスが起動します:

: PID  PPID USER    %CPU   VSZ WCHAN  COMMAND
33126     1 root     0.0  1164 pause  nginx: master process /usr/local/nginx/sbin/nginx
33134 33126 nobody   0.0  1368 kqread nginx: worker process (nginx)
33135 33126 nobody   0.0  1380 kqread nginx: worker process (nginx)
33136 33126 nobody   0.0  1368 kqread nginx: worker process (nginx)
36264 33126 root     0.0  1148 pause  nginx: master process /usr/local/nginx/sbin/nginx
36265 36264 nobody   0.0  1364 kqread nginx: worker process (nginx)
36266 36264 nobody   0.0  1364 kqread nginx: worker process (nginx)
36267 36264 nobody   0.0  1364 kqread nginx: worker process (nginx)

この時点では、二つのnginxのインスタンスが起動して、共に受信中のリクエストを処理しています。古いインスタンスを停止するために、古いマスター・プロセスに対してWINCHシグナルを送出する必要があります。そうすることで、古いワーカー・プロセスも緩やかにシャットダウンを始めます。

: PID  PPID USER    %CPU   VSZ WCHAN  COMMAND
33126     1 root     0.0  1164 pause  nginx: master process /usr/local/nginx/sbin/nginx
33135 33126 nobody   0.0  1380 kqread nginx: worker process is shutting down (nginx)
36264 33126 root     0.0  1148 pause  nginx: master process /usr/local/nginx/sbin/nginx
36265 36264 nobody   0.0  1364 kqread nginx: worker process (nginx)
36266 36264 nobody   0.0  1364 kqread nginx: worker process (nginx)
36267 36264 nobody   0.0  1364 kqread nginx: worker process (nginx)

しばらくすると、古いワーカー・プロセスはすべて終了し、新しいワーカー・プロセスが受信したリクエストを処理しています:

: PID  PPID USER    %CPU   VSZ WCHAN  COMMAND
33126     1 root     0.0  1164 pause  nginx: master process /usr/local/nginx/sbin/nginx
36264 33126 root     0.0  1148 pause  nginx: master process /usr/local/nginx/sbin/nginx
36265 36264 nobody   0.0  1364 kqread nginx: worker process (nginx)
36266 36264 nobody   0.0  1364 kqread nginx: worker process (nginx)
36267 36264 nobody   0.0  1364 kqread nginx: worker process (nginx)

この時点ならば、待ち受けているソケットをすべて閉じていないので、次のような手順で古いサーバーに戻すこともできます:

  • HUPシグナルを古いマスター・プロセスに送出します。そうすると、古いマスター・プロセスは設定ファイルを再度読み込むことなくワーカー・プロセスを起動します。
  • QUITシグナルを新しいマスター・プロセスに送出し、新しいワーカー・プロセスを緩やかに終了させます。
  • TERMシグナルを新しいマスター・プロセスに送出し強制終了させます。
  • もし何らかの理由で新しいマスター・プロセスが終了しないならば、KILLシグナルを送信します。新しいマスター・プロセスが終了したならば、古いマスター・プロセスが.oldbinの接尾辞を.pidファイルから削除するので、アップグレード前の状態に戻ります。

もしアップデートが成功し、新しいサーバーを実行し続けたいならば、QUITシグナルを古いマスター・プロセスに送信し、新しいサーバーだけが残るようにします:

: PID  PPID USER    %CPU   VSZ WCHAN  COMMAND
: 36264     1 root     0.0  1148 pause  nginx: master process /usr/local/nginx/sbin/nginx
: 36265 36264 nobody   0.0  1364 kqread nginx: worker process (nginx)
: 36266 36264 nobody   0.0  1364 kqread nginx: worker process (nginx)
: 36267 36264 nobody   0.0  1364 kqread nginx: worker process (nginx)

リファレンス

Command Line Options

Signals