CommandLineJa
Nginxにはわずかのコマンドライン・パラメータしかありません。他のソフトウェア・システムと違って、設定はすべて設定ファイルによって行われます(imagine that)。
- [#options オプション]
- [#example 実例]
- [#lncus シグナルを使って新しい設定ファイルを読み込む]
- [#utnbotf オン・ザ・フライで新しいバイナリにアップグレードする]
Contents |
[edit] オプション
-c </path/to/config> デフォルトの設定ファイル以外のファイルを指定します
-g グローバルな ディレクティブを指定します。 (version >=0.7.4)
-t 起動せず、設定ファイルのテストのみを行います。設定ファイルのシンタックスが正しいかを確認し、次に設定ファイルが参照しているファイルを開こうとします。
-v バージョンを出力します。
-V バージョンを出力し、コンパイラのバージョンとconfigureオプションも出力します。
[edit] 実例
/usr/bin/nginx -t -c ~/mynginx.conf -g "pid /var/run/nginx.pid; worker_processes 2;"
[edit] シグナルを使ってNginxを制御する
シグナルを使ってマスター・プロセスの制御を行うことができます。デフォルトでは、nginxはマスター・プロセスのプロセスIDを/usr/local/nginx/logs/nginx.pidに書き込みます。これは、コンパイル時に./configureにパラメータを渡すか、設定ファイルのpidディレクティブを使うことによって変更することができます。
マスター・プロセスは以下のシグナルを処理することができます:
| TERM, INT | 即座にシャットダウンします |
| QUIT | 緩やかにシャットダウンします |
| HUP | 設定ファイルの再読み込み 新しい設定ファイルで新規ワーカー・プロセスを起動します 古いワーカー・プロセスは緩やかにシャットダウンされます |
| USR1 | ログファイルを開き直します |
| USR2 | 実行ファイルをオン・ザ・フライでアップグレードします |
| WINCH | ワーカー・プロセスを上品にシャットダウンします |
あなたがワーカー・プロセスを制御する必要はありません。しかしながら、ワーカー・プロセスもいくつかのシグナルをサポートしています:
| TERM, INT | 即座にシャットダウンします |
| QUIT | 緩やかにシャットダウンします |
| USR1 | ログファイルを開き直します |
[edit] シグナルを使って新しい設定ファイルを読み込む
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)
[edit] オン・ザ・フライで新しいバイナリにアップグレードする
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)










