Apache2

Certbot 正在殺死我的 apache 伺服器

  • June 9, 2020

所以偶爾我會收到一封關於 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 = standaloneauthenticator = 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.

引用自:https://serverfault.com/questions/1020673