Nginx启动、重启、重新加载配置文件和平滑升级

这篇具有很好参考价值的文章主要介绍了Nginx启动、重启、重新加载配置文件和平滑升级。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Nginx启动、重启、重新加载配置文件和平滑升级
nginx 重新加载配置,项目踩坑,nginx,linux,运维,重启,升级

大家好,我是洲洲,欢迎关注,一个爱听周杰伦的程序员。关注公众号【程序员洲洲】即可获得10G学习资料、面试笔记、大厂独家学习体系路线等…还可以加入技术交流群 欢迎大家在CSDN后台私信我!

前言

首先我们介绍一下Nginx是什么,怕有些同学忘了Nginx的定义了!

Nginx有一个主进程和几个工作进程,主进程的主要作用就是读取、评估配置文件和管理工作进程,工作进程对请求做实际处理。工作进程的数量是在配置文件中配置的,一般设置为cpu的核心数线程数。

Nginx可以通过信号控制,默认情况下,主进程的进程ID记录在/usr/local/nginx/logs/nginx.pid 文件中。信号可以通过nginx可执行文件发送给nginx (nginx -s 信号),也可以通过unix的kill命令发送给nginx,这种情况下是将信号直接发送给指定进程ID的进程,如:kill QUIT 1628。

一、启动

启动nginx,直接运行nginx的可执行文件:


[root@localhost ~]# /usr/local/nginx/sbin/nginx

二、停止Nginx

快速关闭:nginx -s stop 或者kill -TERM 主进程号 或者kill -INT 主进程号


[root@localhost sbin]# pwd
/usr/local/nginx/sbin
[root@localhost sbin]# ./nginx -s stop


//方案2
[root@localhost sbin]# ps -ef |grep nginx|grep master
root       9879      1  0 13:15 ?        00:00:00 nginx: master process ./nginx
[root@localhost sbin]# kill -TERM 9879


//方案3
[root@localhost sbin]# kill -INT 9879

优雅关闭(不接受新的连接请求,等待旧的连接请求处理完毕再关闭):nginx -s quit 或者 kill -QUIT 主进程号


[root@songguoliang sbin]# pwd
/usr/local/nginx/sbin
[root@songguoliang sbin]# ./nginx -s quit

注意:执行该命令的用户应该是启动nginx的用户


[root@localhost sbin]# ps -ef |grep nginx
root       9889      1  0 13:17 ?        00:00:00 nginx: master process ./nginx
nobody     9890   9889  0 13:17 ?        00:00:00 nginx: worker process
root       9893   2008  0 13:18 pts/1    00:00:00 grep nginx
[root@localhost sbin]# kill -QUIT 9889

三、重新加载配置文件

nginx -s reload 或者 kill -HUP 主进程号

为了让主进程重新读取配置文件,应该向主进程发送一个HUP信号,主进程一旦接收到重新加载配置的的信号,它就检查配置文件语法的有效性,然后试图应用新的配置,即打开新的日志文件和新的socket 监听,如果失败,它将回滚配置更改并继续使用旧的配置,如果成功了,它开启新的工作进程,并给旧的工作进程发消息让它们优雅的关闭,旧的工作进程接收到关闭信号后,不再接收新的请求,如果已有请求正在处理,等当前请求处理完毕后关闭,如果没有请求正在处理,则直接关闭。


[root@localhost sbin]# ./nginx -s reload

方案2:


[root@localhost sbin]# ps -ef|grep nginx
root       9944      1  0 13:22 ?        00:00:00 nginx: master process ./nginx
nobody     9949   9944  0 13:23 ?        00:00:00 nginx: worker process
root       9960   9917  0 13:28 pts/1    00:00:00 grep nginx
[root@songguoliang sbin]# kill -HUP 9944

四、测试配置文件

检查配置文件语法是否正确,然后试图打开文件涉及的配置:nginx -t


[root@localhost sbin]# ./nginx -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful

五、查看nginx版本信息


[root@zhouzhou sbin]# ./nginx -v
nginx version: nginx/1.10.1

六、查看nginx版本信息,编译版本,和配置参数


[root@songguoliang sbin]# ./nginx -V
nginx version: nginx/1.10.1
built by gcc 4.4.7 20120313 (Red Hat 4.4.7-17) (GCC) 
configure arguments: --prefix=/usr/local/nginx

七、重启日志文件

重启日志文件,备份日志文件时常用:nginx -s reopen 或者 kill -USR1 主进程号


[root@localhost sbin]# ./nginx -s reopen

[root@localhost sbin]# kill -USR1 2030

由于nginx是通过inode指向日志文件的,inode和文件名无关,所以即使把日志文件重命名,nginx还是将日志文件写入原文件,只有用上面的命令重新开启日志文件才能将日志写入新的日志文件。

八、nginx平滑升级

如果你需要升级或者添加、删除服务器模块时,可以通过nginx的平滑升级,在不停止服务的情况下升级nginx。

(1)用新的nginx可执行程序替换旧的可执行程序,即下载新的nginx,重新编译到旧版本的安装路径中(重新编译之前可以备份旧的可执行文件)

(2)给nginx主进程号发送USR2信号


[root@localhost sbin]# kill -USR2 9944

执行命令前的进程:


[root@localhost sbin]# ps -ef |grep nginx
root       9944      1  0 13:22 ?        00:00:00 nginx: master process ./nginx
nobody     9965   9944  0 13:29 ?        00:00:00 nginx: worker process
root      10010   9917  0 13:42 pts/1    00:00:00 grep nginx

执行命令后的进程:


[root@localhost sbin]# ps -ef |grep nginx
root       9944      1  0 13:22 ?        00:00:00 nginx: master process ./nginx
nobody     9965   9944  0 13:29 ?        00:00:00 nginx: worker process
root      10012   9944  0 13:43 ?        00:00:00 nginx: master process ./nginx
nobody    10013  10012  0 13:43 ?        00:00:00 nginx: worker process
root      10015   9917  0 13:43 pts/1    00:00:00 grep nginx

给nginx发送USR2信号后,nginx会将logs/nginx.pid文件重命名为nginx.pid.oldbin,然后用新的可执行文件启动一个新的nginx主进程和对应的工作进程,并新建一个新的nginx.pid保存新的主进程号


[root@songguoliang logs]# pwd
/usr/local/nginx/logs
[root@songguoliang logs]# ll
总用量 16
-rw-r--r--. 1 nobody root 596 108 13:02 access.log
-rw-r--r--. 1 nobody root 881 108 13:43 error.log
-rw-r--r--. 1 root   root   6 108 13:43 nginx.pid
-rw-r--r--. 1 root   root   5 108 13:22 nginx.pid.oldbin
[root@songguoliang logs]# cat nginx.pid
10012
[root@songguoliang logs]# cat nginx.pid.oldbin 
9944

这时,nginx的新的实例和旧的实例同时工作,共同处理请求连接。接下来要关闭旧的实例进程。

先给旧的主进程发送WINCH信号,kill -WINCH 旧的主进程号

[root@localhost sbin]# ps -ef |grep nginx
root       9944      1  0 13:22 ?        00:00:00 nginx: master process ./nginx
nobody     9965   9944  0 13:29 ?        00:00:00 nginx: worker process
root      10012   9944  0 13:43 ?        00:00:00 nginx: master process ./nginx
nobody    10013  10012  0 13:43 ?        00:00:00 nginx: worker process
root      10092   9917  0 14:05 pts/1    00:00:00 grep nginx
[root@localhost sbin]# kill -WINCH 9944
[root@localhost sbin]# 
[root@localhost sbin]# 
[root@localhost sbin]# 
[root@localhost sbin]# ps -ef |grep nginx
root       9944      1  0 13:22 ?        00:00:00 nginx: master process ./nginx
root      10012   9944  0 13:43 ?        00:00:00 nginx: master process ./nginx
nobody    10013  10012  0 13:43 ?        00:00:00 nginx: worker process
root      10094   9917  0 14:06 pts/1    00:00:00 grep nginx

旧的主进程号收到WINCH信号后,将旧进程号管理的旧的工作进程优雅的关闭。即一段时间后旧的工作进程全部关闭,只有新的工作进程在处理请求连接。这时,依然可以恢复到旧的进程服务,因为旧的进程的监听socket还未停止。

给旧的主进程发送QUIT信号,使其关闭。


[root@localhost sbin]# kill -QUIT 9944
[root@localhost sbin]# ps -ef |grep nginx
root      10012      1  0 13:43 ?        00:00:00 nginx: master process ./nginx
nobody    10013  10012  0 13:43 ?        00:00:00 nginx: worker process
root      10118   9917  0 14:16 pts/1    00:00:00 grep nginx

给旧的主进程发送QUIT信号后,旧的主进程退出,并移除logs/nginx.pid.oldbin文件,nginx的升级完成。

总结

Hello,各位看官老爷们好,洲洲已经建立了CSDN技术交流群,如果你很感兴趣,可以私信我加入我的社群。

📝社群中不定时会有很多活动,例如每周都会包邮免费送一些技术书籍及精美礼品、学习资料分享、大厂面经分享、技术讨论、行业大佬创业杂谈等等。

📝社群方向很多,相关领域有Web全栈(前后端)、人工智能、机器学习、自媒体变现、前沿科技文章分享、论文精读等等。

📝不管你是多新手的小白,都欢迎你加入社群中讨论、聊天、分享,加速助力你成为下一个技术大佬!也随时欢迎您跟我沟通,一起交流,一起成长。变现、进步、技术、资料、项目、你想要的这里都会有

📝网络的风口只会越来越大,风浪越大,鱼越贵!欢迎您加入社群~一个人可以或许可以走的很快,但一群人将走的更远!

📝关注我的公众号(与CSDN同ID:程序员洲洲)可以获得一份Java 10万字面试宝典及相关资料!~

📝想都是问题,做都是答案!行动起来吧!欢迎评论区or后台与我沟通交流,也欢迎您点击下方的链接直接加入到我的交流社群!~ 跳转链接社区~

nginx 重新加载配置,项目踩坑,nginx,linux,运维,重启,升级文章来源地址https://www.toymoban.com/news/detail-532958.html

到了这里,关于Nginx启动、重启、重新加载配置文件和平滑升级的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 外部配置文件和Class打包到jar 然后重新启动java -jar

    我这边以demo.jar和application-dev.properties配置文件为例 一.将Test1.class和Test2.class替换到jar内部 步骤1:解压原始demo.jar 将两个class文件拷贝到jar目录下后cd到文件目录执行: 步骤2:替换或添加class文件 步骤3:重新打包jar 二、优先加载外部的配置文件application-dev.properties,启动ja

    2024年01月19日
    浏览(38)
  • SpringBoot 启动配置文件加载和参数配置修改问题

    SpringBoot 或者SpringCloud 有配置文件加载和参数修改的机制,本文将从两个角度阐述参数修改和配置文件启动覆盖问题。 以下几种方式都可以被@Value读取到 java -jar -Dserver.port=8080 -Xms1024m demo.jar java -jar demo.jar --server.port=8080 从操作系统的环境变量中读取 通过项目中配置文件boots

    2023年04月15日
    浏览(45)
  • 你的设备遇到问题,需要重启;我们只收集某些错误信息,然后为你重新启动。

    VMware安装centos和打开其他虚拟机时电脑蓝屏报错: 你的设备遇到问题,需要重启;我们只收集某些错误信息,然后为你重新启动。 我的解决办法:开启Windows的虚拟机平台 打开控制面板,点击“程序”,点击“启用或关闭windows功能”,勾选“虚拟机平台”

    2024年02月11日
    浏览(220)
  • NGINX指定启动的配置文件

    若不指定安装路径,nginx默认安装在 /usr/local/nginx路径下。 若不指定nginx的配置文件,nginx默认启动找的是同级nginx更路径下的/conf/nginx.conf配置文件 但该配置文件的所在路径 以及文件名不是绝对的,可根据需要放置在不同的路径。胡根据业务场景修改配置文件名。 以下是一个

    2024年02月13日
    浏览(60)
  • nginx常用命令(启动、关闭、重启)

    1、找nginx的安装位置 输入指令 whereis nginx 找到nginx安装的目录 2、进入nginx安装的目录 输入指令 cd /usr/local/nginx 进入到nginx安装的目录 3、执行需要操作的指令 关闭 启动 重启

    2024年02月02日
    浏览(39)
  • 命令行启动nginx、停止nginx 、重启nginx详细教程

    1、按住shift键, 右键空白处, 打开powerShell窗口 如下: 2、输入启动 nginx指令 start nginx 屏幕会闪一个弹窗 再打开任务管理器 查看是否已有服务  有任务说明启动成功了 备注: 也可以双击nginx.exe 可以运行 但是这种方式容易造成 上次的nginx未关闭 服务中会有多个nginx服务 更新

    2024年02月12日
    浏览(38)
  • linux nginx启动、停止、重启命令

    2024年02月12日
    浏览(39)
  • 关于VIVADO与VScode配置重启后,配置无效,需重新配置的问题

    问题:我想将VIVADO与VScode配置关联起来,实现在VIVADO中点击“设计文件”可以直接打开VScode进行代码编写的效果。问题在于,每次在VIVADO中配置完之后,再重启VIVADO,之前的配置都恢复了默认值,又得我重新配置,比较麻烦。经过数次研究,终于找到了解决办法,可以一劳永

    2024年02月09日
    浏览(39)
  • Nginx基础常用命令,版本,启动,停止,重启等

    最近部署了nginx-1.18版本,常用命令记录如下。 1.启动nginx C:javanginx-1.18.0 start nginx 或 C:javanginx-1.18.0 nginx.exe 2.停止nginx C:javanginx-1.18.0 nginx.exe -s stop 或 C:javanginx-1.18.0 nginx.exe -s quit 注:stop是快速停止nginx,可能并不保存相关信息;quit是完整有序的停止nginx,并保存相关信息

    2024年02月03日
    浏览(116)
  • 启动spring boot项目时加载配置文件报错的问题

    最近把电脑重置了一下,然后重新安装各种开发软件,从gitee拉项目到本地运行时居然启动报错了: Failed to load property source from \\\'file:/D:/program/IdeaProjects/layui/target/classes/application.yml\\\' 这是加载配置文件的时候失败了,提示一堆错误信息,但是没有任何实质性的帮助。 导致种情况

    2024年02月11日
    浏览(48)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包