systemctl reload nginx 非常慢,这导致 certbot 更新出现问题

systemctl reload nginx 非常慢,这导致 certbot 更新出现问题

我一直在运行一个大约有 60 个网站的 nginx 网络服务器,我注意到运行以下命令非常慢:

  • systemctl reload nginx大约需要20秒。
  • systemctl restart nginx需要30多秒。

我在尝试使用 certbot 颁发或更新 SSL 证书时也遇到了问题。它失败了,因为它找不到质询文件。在解决了这个次要问题后,我发现使用这些标志 - --debug-challenges -v- 运行 certbot 命令会导致在尝试颁发证书之前暂停。如果我等待 25 秒然后继续该过程,它会正常工作而不会出现错误。我已经确认质询文件需要 25 秒才能通过提供的 URL 访问。我相信质询文件正在加载到 nginx 配置中,但无法立即通过 URL 获得,因为 nginx 需要很长时间才能重新加载配置。

这导致的最大问题是 certbot 自动续订失败,所以我目前必须手动运行续订。

简而言之,我需要帮助来解决这个问题。

编辑 - 我进行了一些故障排除。我删除了所有符号链接/etc/nginx/sites-enabled/,然后逐个添加回来。我注意到每个站点都会使 nginx 解析站点的时间增加 (大约) 0.1 秒。

我使用以下命令检查了这一点: time nginx -t

当我添加所有站点(大约 60 个站点)时,上述命令运行所需的时间大约为 7 秒。

我也尝试过只添加一个站点,并使站点文件尽可能简单,但运行仍然需要大约相同的时间nginx -t。因此,我认为问题不在于配置文件本身。

您对故障排除还有其他想法吗?这可能与 IPv6 有关吗?我认为我的服务器没有 IPv6 地址,所以我不知道这是否会导致问题。

答案1

我已将我的评论整理成答案,以方便将来搜索。


问题的核心

这导致的最大问题是自动 certbot 续订失败,所以我目前必须手动运行续订。

我的答案

您可以通过这些方式让 certbot 等待 nginx 重新加载。

使用命令行选项

Certbot > 用户指南 > Certbot 命令行选项

  --nginx-sleep-seconds NGINX_SLEEP_SECONDS
                        Number of seconds to wait for nginx configuration
                        changes to apply when reloading. (default: 1)

使用配置文件

Certbot > 用户指南 > 配置文件

Certbot 接受一个全局配置文件,该文件将其选项应用于 Certbot 的所有调用。

默认情况下不会创建 cli.ini 文件(但如果您通过包管理器安装了 Certbot,它可能已经存在)。

GitHub 上的 certbot 仓库中存在一个问题

您还可以输入:

nginx-sleep-seconds = 30

转化为/etc/letsencrypt/cli.ini,使其成为全球化的。


我的原始帖子如下:


在下面的示例单元文件中,nginx -s reload设置为ExecReload

https://www.nginx.com/resources/wiki/start/topics/examples/systemd/

ExecReload=/usr/sbin/nginx -s 重新加载

该选项似乎可以正常关机。

https://nginx.org/en/docs/switches.html

reload — 重新加载配置,使用新配置启动新的工作进程,正常关闭旧的工作进程。

https://www.nginx.com/resources/wiki/start/topics/tutorials/commandline/

然而,更有趣的选项是能够动态更改 NGINX 配置

如果您的环境中设置了该选项或类似选项,那么这种行为是否可能导致延迟?

相关内容