Certbot 正在殺死我的 apache 伺服器
所以偶爾我會收到一封關於 apache 無法訪問的電子郵件。我的意思是它主動拒絕連接(對於 Chrome,ERR_CONNECTION_REFUSED)。
systemctl status apache2 ● apache2.service - The Apache HTTP Server Loaded: loaded (/lib/systemd/system/apache2.service; enabled; vendor preset: enabled) Active: inactive (dead) since Tue 2020-06-09 14:36:58 CEST; 8min ago Process: 2533 ExecStop=/usr/sbin/apachectl stop (code=exited, status=0/SUCCESS) Process: 4325 ExecReload=/usr/sbin/apachectl graceful (code=exited, status=0/SUCCESS) Process: 20597 ExecStart=/usr/sbin/apachectl start (code=exited, status=0/SUCCESS) Main PID: 20603 (code=exited, status=0/SUCCESS)
系統日誌
Jun 9 14:36:01 f CRON[2494]: (www-data) CMD (php /var/www/avg.php) Jun 9 14:36:57 f systemd[1]: Starting Certbot... Jun 9 14:36:58 f apachectl[2533]: httpd (no pid file) not running Jun 9 14:37:01 f CRON[2544]: (www-data) CMD (php /var/www/avg.php) Jun 9 14:37:25 f systemd[1]: Started Certbot. Jun 9 14:37:25 f systemd[1]: certbot.timer: Adding 2h 47min 35.570277s random time. Jun 9 14:37:25 f systemd[1]: certbot.timer: Adding 1h 45min 16.226705s random time.
最後一秒 apache 正在執行並且日誌記錄是在 09/Jun/2020:14:36:02 (它是伺服器每分鐘從其他伺服器接收一堆來自 cron 的請求,所以沒有日誌真是太酷了在最後一分鐘進入)。
我嘗試升級 certbot,但它似乎是最後一個可能的版本。
certbot is already the newest version (0.28.0-1~deb9u2). python-certbot-apache is already the newest version (0.28.0-1~deb9u1).
這不是第一次發生,我在網上沒有找到太多。我可以採取哪些後續步驟來找到警告?
編輯:/var/log/letsencrypt.log
2020-06-09 14:36:58,199:INFO:certbot.hooks:Running pre-hook command: apachectl -k stop 2020-06-09 14:36:58,250:INFO:certbot.main:Renewing an existing certificate
在末尾
2020-06-09 14:37:25,395:DEBUG:certbot.renewal:no renewal failures 2020-06-09 14:37:25,395:INFO:certbot.hooks:Running post-hook command: apachectl -k start
有沒有辦法配置 certbot 不使用埠 80 而是使用其他一些,所以我不需要我的 apache 在更新期間停止(並且在最壞的時間)?
正如 Рамиль Матрасов 所提到的,您已經將 Certbot 配置為執行自己的網路伺服器,即在獨立外掛中執行,而您應該一直使用webroot外掛。您的配置導致 Certbot 停止 Apache 以便它可以綁定到 port
80
。此外,Henrik Pingel 建議的 DNS-01 挑戰對於您的案例來說似乎不必要地複雜。網路根
如果您正在執行能夠修改所提供內容的本地網路伺服器,並且您不希望在證書頒發過程中停止網路伺服器,則可以使用 webroot 外掛通過包含 certonly 來獲取證書並
--webroot
在命令行上。此外,您需要指定--webroot-path
或-w
使用包含您的網路伺服器提供的文件的頂級目錄(“網路根目錄”)。但是,顯示您應該做的並不能真正幫助您解決目前問題:您還可以通過修改
/etc/letsencrypt/renewal
. 例如,example.com.conf
您目前可能擁有:[renewalparams] authenticator = standalone webroot_path = /home/letsencrypt, [[webroot_map]] example.com = /home/letsencrypt www.example.com = /home/letsencrypt
將每個配置文件的 替換為
authenticator = standalone
並authenticator = webroot
檢查webroot_path
或 映射是否與您在 Apache 中<VirtualHost>
的映射匹配,例如[renewalparams] authenticator = webroot [[webroot_map]] example.com = /var/www/example.com www.example.com = /var/www/example.com
您可以使用
certbot renew --dry-run
.