web-dev-qa-db-ja.com

ダウンタイムなしのNginx構成リロード

Nginxをリバースプロキシとして使用しています。私がそれを使用してそれの設定を更新するときはいつでも

Sudo "cp -r #{nginx_config_path}* /etc/nginx/sites-enabled/"
Sudo "kill -s HUP `cat /var/run/nginx.pid`"

私は短いダウンタイムに直面しています。どうすればそれを回避できますか?

131
Saurav Shah

service nginx reloadまたは/etc/init.d/nginx reloadを実行します

ダウンタイムなしで構成のホットリロードを実行します。保留中のリクエストがある場合、死ぬ前にそれらの接続を処理するnginxプロセスが長引いているため、構成を再ロードする非常に適切な方法です。

Sudoを前に付けたい場合があります

193
Hengjie

/usr/sbin/nginx -s reloadを実行します

その他のコマンドラインオプションについては http://wiki.nginx.org/CommandLine を参照してください。

88
Shiv Kumar Sah

いいえ、あなたは間違っています。あなたが説明する手順でダウンタイムに直面することは想定されていません。 (Nginxは、ダウンタイムなしでオンザフライで構成を再ロードできるだけでなく、実行可能ファイルのアップグレードもダウンタイムなしで実行できます。)

http://nginx.org/docs/control.html#reconfiguration に従って、HUP信号をnginxに送信すると、正常な再起動が実行され、構成がファイルが正しくなく、手順全体が中止され、HUPシグナルを送信する前と同じようにnginxが残ります。ダウンタイムが発生する可能性はありません。

Nginxが構成ファイルを再度読み取るためには、HUPシグナルをマスタープロセスに送信する必要があります。マスタープロセスは最初に構文の有効性を確認し、次に新しい構成の適用を試みます。つまり、ログファイルと新しいリッスンソケットを開きます。これが失敗した場合、変更をロールバックし、古い構成で引き続き機能します。

10
cnst

完全を期すために、systemdの方法:

systemctl reload nginx
3
Selcuk

通常、サービスの構成ファイルを再読み込みしても、実行中のサービスには影響しません。ただし、これはSIGHUP信号の処理方法によって異なります。

特定のサービスでリロード中にダウンタイムが発生している場合、ロードバランサーを使用して複数のサーバーで同じサービスを実行することで、これを回避できます。この場合、一度に1つのサーバーを取り出し、再ロード/再起動できます。その後、問題がないことを確認してから再度追加できます。

2
Khaled