如果我更新我的安全證書,我是否需要重新啟動 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
and的符號連結/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 nginx
或service 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
.