Nginx

如果我更新我的安全證書,我是否需要重新啟動 Nginx?

  • February 4, 2021

所以我正在設置一個啟用 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/certificateand的符號連結/path/to/private/key,指向我目前的證書,nginx如果我只是將它們更改為指向新的(更新的)證書,我是否仍然需要重新啟動?有替代品嗎?

您需要重新載入Nginx 以使更新的證書顯示正確的到期日期(閱讀下面的說明和其他評論以了解重新載入重新啟動Nginx 之間的區別)。

重新載入 Nginx 後,一個簡單的記憶體清除和瀏覽應該允許您在 SSL 證書上查看更新的到期日期。

或者,如果您更喜歡 cli,則始終可以使用舊的可信賴的 OpenSSL 命令:

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

這將為您提供證書上的目前日期。

在您的情況下,埠將是 80 而不是 443(OP 後來表示問題中的埠 80 實際上應該是 443,但是 Nginx 將在您提供的任何埠上偵聽 HTTP 或 HTTPS,只要它們目前未被其他程序使用)。

很多時候nginx -s reload都沒有按預期工作。在許多系統(Debian 等)上,您需要使用/etc/init.d/nginx reload.

編輯以更新和澄清這個答案:

在帶有 的現代系統上systemd,您還可以執行systemctl reload nginxservice nginx reload

所有這些**reload方法的不同restart之處在於它們發送一個SIGHUP**信號告訴 Nginx 重新載入其配置而不終止現有連接(這將在完全重啟時發生,並且幾乎肯定會影響使用者)。

如果由於某種原因,Nginx 沒有重新載入您的證書,您可以restart這樣做,但請注意,它的影響要比reload.

重新啟動Nginx,您只需執行systemctl restart nginx,或者在沒有的系統上執行.systemd``nginx -s stop && nginx -s start

如果所有其他方法都失敗(無論出於何種原因),只需終止 Nginx PID,您始終可以通過直接使用nginx -c /path/to/nginx.conf.

引用自:https://unix.stackexchange.com/questions/247418