Certbot 正在杀死我的 Apache 服务器

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 运行和记录的最后一秒是在 2020 年 6 月 9 日: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 在续订期间停止(并且在最糟糕的时候)?

答案1

正如 Рамиль Матрасов 所提到的,您已将 Certbot 配置为运行其自己的 Web 服务器,即独立插件,而你应该使用网页根目录插件。您的配置导致 Certbot 停止 Apache,以便它可以绑定到端口80。此外,Henrik Pingel 建议的 DNS-01 质询对于您的用例来说似乎不必要地复杂。

网根

如果您正在运行本地 Web 服务器,并且能够修改其所提供内容,并且您不想在证书颁发过程中停止 Web 服务器,则可以使用 webroot 插件通过在 --webroot命令行中包含 certonly 和 来获取证书。此外,您还需要指定--webroot-path-w使用包含 Web 服务器所提供文件的顶级目录(“Web 根目录”)。

然而,展示你应该已经完成并不能真正帮助你解决当前的问题:你也可以更改当前设置通过修改 中的配置文件/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

答案2

您对 certbot 的配置有误,certbot 可以使用 apache 作为 Web 服务器来处理 AMCE 挑战。而您将其配置为使用其自己的嵌入式 Web 服务器。您应该这样做:

./certbot-auto certonly --webroot -d host.example.com --webroot-path /var/www/html

当你完成一次后,只需执行以下 crontab 操作:

certbot-auto renew

此配置将使用 /var/www/html 创建带有挑战的 .well-known 目录并使用您的 apache。

答案3

配置certbot使用DNS-01挑战,而不是HTTP-01挑战。

相关内容