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


33

所以我要设置一个启用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如果我只是简单地将其更改为指向新的(更新的)证书,是否仍需要重新启动?有其他选择吗?

Answers:


26

是的,我很确定您需要重新加载Nginx才能使更新的证书显示正确的到期日期,但是简单的缓存清除和浏览应允许您查看。

或者,如果您喜欢cli,则可以始终使用旧的可信任的OpenSSL命令:

echo | openssl s_client -connect your.domain.com:443 | openssl x509 -noout -dates

这将为您提供证书上的当前日期。在您的情况下,端口将是80,而不是443。

很多时候nginx -s reload无法正常工作。在许多系统(Debian等)上,您需要使用/etc/init.d/nginx reload

如果其他所有方法均失败,则始终可以直接指定配置文件,方法是nginx -c /path/to/nginx.conf


哎呀,那些监听应该是端口443,我不好!无论如何,感谢您的出色回答!
Haravikk

8
nginx reload和重新启动Nginx是两件事:reload不重新启动Nginx,而仅发送SIGHUP信号。SIGHUP信号够吗?
2016年

11
是。发送SIGHUP将导致nginx切换到更新的证书。
rspeed

echo |您命令中的功能是什么?如果我将其保留,则不会收到提示。我想对输出进行grep notAfter,然后将其与当前日期进行比较,以在证书过期前几天对自己进行垃圾邮件发送。
Amedee Van Gasse

@AmedeeVanGasse echo管道仅使OpenSSL Shell干净退出到Bash并正常返回输出。这对于在脚本中使用干净的出口以及听起来像您正在计划的自动化目的是必要的。我已经使用相同的基本功能实现了许多脚本,例如您计划的脚本。
红宝石

21

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

如果碰巧nginx无法读取某些SSL证书,我将继续使用较旧的配置运行。否则,无论您对配置文件进行了什么操作,它都将继续起作用并处理请求。即使它们损坏了,您的网站仍会打开。

因此,是的,如果您希望nginx查看更新的证书,则不必重启nginx并冒险将服务器脱机超过几秒钟。应该足以:

sudo service nginx reload

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

sudo systemctl reload nginx

3
Ubuntu 16CentOS 7和其他支持systemd您的系统上,也可以执行sudo systemctl reload nginxsudo service nginx reload上面提到的是别名)。
Ville

@Ville,你是对的,但这是要记住的另一条命令;到处都没有系统
Sanmai

我喜欢做service nginx restart。我从不厌倦看到它完成的速度。但是,如果它处于cron作业中,而我什么也看不到,我宁愿进行某种重新加载,以避免破坏任何可能正在进行的持久性会话或挂起的操作。
罗尔夫
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.