在修改完站点配置文件后,运行 sudo systemctl reload nginx,再次查看站点,发现配置好像并未生效,有点莫名其妙,直到查看了 nginx 的错误日志才发现下面的错误提示:

2018/09/21 10:32:08 [emerg] 1361#1361: duplicate location "/404.html" in /etc/nginx/sites-enabled/sb.life:162
2018/09/21 10:34:35 [emerg] 1361#1361: duplicate location "/404.html" in /etc/nginx/sites-enabled/sb.life:91

那我只能这么理解:reload nginx 命令在遇到某些配置错误时并不会给出错误提示,但是有些配置错误,reload nginx 时是会给出提示的。(除非,我记错了?反正印象中好像是会给出错误提示的,因为我基本上都是用 reload,几乎不用 restart)

像上面的这种错误情况,reload nginx 没有提示错误,但是 nginx 并没有应用最新的配置,还是之前的配置,所以,很迷惑人,你以为 reload nginx 正确执行了,配置也应用了,其实它压根就没有使用最新配置。

所以,最好还是先 nginx -t 测试一下,确定配置没有问题了,再运行 reload,或者直接用 restart 而不要用 reload。nginx -t 和 restart 时都是可以检测到这些错误的。不过最好不要在未检测配置时直接 restart,因为一旦配置错误,nginx 就停止了,启动不了了,会导致其他站点也一并挂掉

【P.S.】我应该是记错了,在配置错误时,reload nginx 命令都不会提示错误的,因为刚才又测试了下,随便乱改了几处配置文件,都是未有任何提示,直接可以运行 reload 命令。