如果续订安全证书,是否需要重新启动 Nginx?

如果续订安全证书,是否需要重新启动 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和的符号链接/path/to/private/key指向我当前的证书,nginx如果我只是将它们更改为指向新的(更新的)证书,我是否仍然需要重新启动?还有其他选择吗?

答案1

您将需要重新加载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 nginxservice nginx reload

所有这些reload方法不同于restart事实上他们发送了一个SIGHUP告诉 Nginx 重新加载其配置而不终止现有连接的信号(这会在完全重新启动时发生,并且几乎肯定会影响用户)。

如果由于某种原因,Nginx 没有重新加载您的证书,您可以restart这样做,但请注意,它的影响会比reload.

重新开始Nginx,您只需运行即可systemctl restart nginx,或者在没有 Nginx 的系统上systemd运行nginx -s stop && nginx -s start

如果所有其他方法都失败了(无论出于何种原因),只需杀死 Nginx PID,并且您始终可以通过直接使用nginx -c /path/to/nginx.conf.

答案2

收到后SIGHUPnginx 将重新加载更新的配置,在打开日志文件和读取 SSL 证书时进行验证,然后根据之前的配置正常关闭工作进程。

如果碰巧 nginx 无法读取某些 SSL 证书,我将继续使用旧配置运行。换句话说,无论您对配置文件做了什么,它都会继续运行并处理请求。即使它们被破坏,您的网站仍然会打开。

所以,是的,如果您希望 nginx 看到更新的证书,则不必重新启动 nginx 并冒使服务器离线超过几秒钟的风险。这应该足以:

sudo service nginx reload

在大多数当前默认使用 systemd 的发行版中,您还可以使用以下命令重新加载 nginx:

sudo systemctl reload nginx

相关内容