セキュリティ証明書を更新する場合、Nginxを再起動する必要がありますか?


33

だから私は、次のようなサーバー定義でSSLを有効にしてnginxサーバーを設定しています:

server {
    listen :80;
    listen [::]:80;
    server_name example.org;
    root /foo/bar;

    ssl on;
    ssl_certificate /path/to/public/certificate;
    ssl_certificate_key /path/to/private/key;

    ...
}

あなたはアイデアを得る(タイプミスは許してください)。

とにかく、私が思っているのは 証明書を更新する場合、nginxを再起動せずに証明書をインストールする方法はありますか?

たとえば、/path/to/public/certificateおよびからのシンボリックリンクを使用/path/to/private/keyして現在の証明書を指しているnginx場合、これらを変更して新しい(更新された)証明書を指すようにする場合は、再起動する必要がありますか?代替手段はありますか?

回答:


26

はい、更新された証明書が正しい有効期限を表示するためにNginxをリロードする必要があると確信していますが、簡単なキャッシュクリアと参照でこれを表示できるはずです。

または、cliを好む場合は、常に古い信頼できるOpenSSLコマンドを使用できます。

echo | openssl s_client -connect your.domain.com:443 | openssl x509 -noout -dates

これにより、証明書の現在の日付がわかります。あなたの場合、ポートは443ではなく80です。

多くの場合nginx -s reload、期待どおりに機能しません。多くのシステム(Debianなど)では、を使用する必要があります/etc/init.d/nginx reload

他のすべてが失敗した場合は、いつでも構成ファイルを直接指定できますnginx -c /path/to/nginx.conf


おっと、これらのリッスンはポート443用であるはずでした。とにかく、素晴らしい答えをありがとう!
ハラヴィック

8
nginx reloadNginxの再起動は2つの異なるものですreload。Nginxを再起動せず、SIGHUPシグナルのみを送信します。SIGHUPシグナルは十分ですか?
ポートン

11
はい。SIGHUPを送信すると、nginxは更新された証明書に切り替わります。
rspeed

echo |コマンドでの機能は何ですか?省略しても、プロンプトは表示されません。出力をgrepしnotAfterてから現在の日付と比較して、証明書の有効期限が切れる数日前に自分自身をスパムしたいと思います。
アメディーヴァンガッセ

@AmedeeVanGasse echoパイプは、OpenSSLシェルを正常に終了させて​​Bashに戻し、通常どおり出力を返します。これは、スクリプトで使用するためのクリーンな出口と、計画しているように聞こえる自動化のために必要です。同じ基本機能を使用して、計画しているような多数のスクリプトを実装しました。
-rubynorails

21

SIGHUPnginxを受信すると、更新された構成を再読み込みし、ログファイルを開いてSSL証明書を読み取りながら検証し、以前の構成に依存するワーカープロセスを正常にシャットダウンします。

nginxが一部のSSL証明書を読み取れない場合は、古い構成を使用して実行し続けます。それ以外の場合、設定ファイルに対して何を実行しても、機能し続けてリクエストを処理します。たとえそれらが壊れていても、あなたのウェブサイトは開いたままです。

そのため、nginxに更新された証明書を表示させたい場合、nginxを再起動する必要はなく、サーバーを数秒以上オフラインにするリスクはありません。それには十分なはずです:

sudo service nginx reload

systemdがデフォルトで使用されている現在のほとんどのディストリビューションでは、次のコマンドでnginxをリロードすることもできます。

sudo systemctl reload nginx

3
のUbuntu 16CentOSの7、及びその他のシステム支持systemdあなたも実行することができるsudo systemctl reload nginx(これはsudo service nginx reload上記にエイリアスされています)。
ヴィル

@Villeは正しいですが、覚えておくべきもう1つのコマンドです。どこにでもシステム化されていません
-sanmai

するのが大好きですservice nginx restart。どれだけ早く完了するのか、飽きることはありません。ただし、それがcronジョブであり、表示されない場合は、何らかの永続的なセッションや進行中の保留中の操作が中断されないように、何らかのリロードを行います。
ロルフ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.