![查看所有 Nginx Web 服务器相关的常见问题解答](https://www.alaica.com/wp-content/uploads/linux-29.gif)
我知道如何在类 Unix 操作系统下优雅地重新启动 Apache Web 服务器。我对 nginx.conf 进行了更改。如何优雅地重启 Nginx Web 服务器?如何在不重新启动 Nginx 服务器本身且不中断用户当前会话的情况下使 Nginx 服务器配置文件中的更改生效?
教程详情 | |
---|---|
难度级别 | 简单的 |
根权限 | 是的 |
要求 | Linux 或 Unix 终端 |
类别 | 网络服务器 |
操作系统兼容性 | BSD • Linux • Unix |
美东时间。阅读时间 | 3分钟 |
Nginx 是一个免费的开源 Web 服务器,运行在 Linux 和类 Unix 系统上。Nginx 是非常快速且轻量级的服务器,适用于静态和动态工作负载。本页展示了如何在配置更改后优雅地重新启动 Nginx Web 服务器。
如何优雅重启Nginx服务
对于使用 systemctl 命令的带有 systemd 的 GNU/Linux,语法如下:
$ sudo systemctl reload nginx
对于带有 sysv init 的较旧的 Linux 发行版,请尝试服务命令:
$ sudo service nginx reload
当执行 reload 选项时,主 Nginx 进程将关闭子进程,加载新配置,然后启动新的子进程不会干扰操作。因此,我们reload更喜欢restart. 换句话说,不要使用以下任何一个 Linux 命令来正常重启:
$ sudo systemctl restart nginx
或者
$ sudo service nginx restart
优雅地重启 Nginx Web 服务器
Nginx 主进程可以在 Linux 和类 Unix 系统上处理以下信号:
- TERM、INT:快速关闭
- QUIT :正常关闭
- KILL :停止顽固的进程
- HUP:配置重新加载。使用新配置启动新工作进程。优雅地关闭旧的工作进程
- USR1:重新打开日志文件
- USR2:动态升级可执行文件
- WINCH:正常关闭工作进程
在 Linux 或类 Unix 系统上优雅重启 Nginx 的通用语法
以root用户身份尝试以下kill命令和cat命令
$ sudo kill -HUP $( cat /path/to/nginx.pid )
的组合:
可以使用pgrep命令或ps命令找到nginx pid,如下所示::
这是我看到的:
$ pgrep nginx
$ ps aux | grep [n]ginx
根 4333 0.0 0.4 70776 9352 ?Ss Nov24 0:00 nginx: 主进程 /usr/local/nginx/sbin/nginx nginx 9921 1.0 0.5 70776 9888?S Dec05 19:24 nginx:工作进程 nginx 9922 1.0 0.5 70776 10240?S Dec05 19:42 nginx:工作进程 nginx 9923 0.0 0.4 70776 8724?S Dec05 0:00 nginx:缓存管理器进程
记下 PID # 4333。接下来,以 root 用户身份键入以下命令:
请注意,这会隐藏 ps 命令输出中的 grep。
$ kill -HUP 4333
$ sudo kill -HUP 4333
ps aux | grep [n]ginx
如果您使用 Nginx 版本 0.7.53+
最新版本的 Nginx 使得在 Unix 和 Linux 上优雅地重新加载和重新启动 Web 服务变得非常容易。您所要做的就是传递选项-s reload:
# nginx -s reload
OR
# /usr/local/nginx/sbin -s reload
Debian / CentOS / RHEL / Fedora / Ubuntu Linux 尝试
# /etc/init.d/nginx reload
FreeBSD 用户
# /usr/local/etc/rc.d/nginx reload
OpenBSD 用户
# /usr/sbin/nginx -s reload
或者
# /etc/rc.d/nginx reload
如何重新加载/正常重启 chrooted nginx 服务器?
键入以下命令:
# /usr/sbin/chroot /jail /usr/local/nginx/sbin/nginx -s reload
如何在 Docker 或 LXD 容器内重新加载 Nginx
Docker 的语法如下:
# docker container exec {container_name_here} nginx -s reload
OR
# docker kill -s HUP {container_name_here}
LXD 用户可以键入以下命令:
$ lxc exec {container_name_here} -- nginx -t reload
结论
您学习了如何使用各种命令行方法优雅地重新加载 Nginx Web 服务器。请参阅此处的 Nginx文档以获取更多信息。使用 man 命令阅读 Nginx 手册页:
$ man nginx