web-dev-qa-db-ja.com

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

だから私は次のようなサーバー定義で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を再起動する必要がありますか?これらは新しい(更新された)証明書を指しますか?代わりはありますか?

36
Haravikk

はい、更新された証明書が正しい有効期限を表示するために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を使用して、構成ファイルをいつでも直接指定できます。

28
rubynorails

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

Nginxが一部のSSL証明書を読み取れない場合は、古い構成を使用して実行を続けます。別の言い方をすれば、構成ファイルに対して何をしたかに関係なく、機能し続けてリクエストを処理します。壊れていても、ウェブサイトは開きます。

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

Sudo service nginx reload

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

Sudo systemctl reload nginx
23
sanmai