Nginx之热部署

nginx 作为一个反向代理、负载均衡服务器,必须具备高可用的特点,因此 nginx 支持热部署。
nginx 的热部署和其并发模型有着密不可分的关系。说白了,就是因为 master 进程的关系。当通知 ngnix 重读配置文件的时候,master 进程会进行语法错误的判断。如果存在语法错误的话,返回错误,不进行装载;如果配置文件没有语法错误,那么 ngnix 也不会将新的配置调整到所有 worker 中。而是,先不改变已经建立连接的 worker,等待 worker 将所有请求结束之后,将原先在旧的配置下启动的 worker 杀死,然后使用新的配置创建新的 worker。
Nginx 作为一个服务器,我们不可能把服务停了在进行配置升级、软件版本升级吧。所以,Nginx 的热部署就极大的方便了我们对服务器软件的升级维护。

1、获取原nginx的安装目录

whereis nginx

2、查看原nginx版本,并获取原nginx的编译参数

cd /usr/local/nginx

./sbin/nginx -V         #大写V

nginx version: nginx/1.12.2
built by gcc 4.4.7 20120313 (Red Hat 4.4.7-18) (GCC)
built with OpenSSL 1.0.1e-fips 11 Feb 2013
TLS SNI support enabled
configure arguments: --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_ssl_module --with-http_flv_module --with-http_stub_status_module --with-http_gzip_static_module --with-http_realip_module --with-openssl=/opt/openssl-1.0.2r --with-stream --with-stream_ssl_module

3、到官网下载最新版本的nginx (下载地址:http://nginx.org/en/download.html)

cd /opt 

wget http://nginx.org/download/nginx-1.15.0.tar.gz

4、编译新版nginx-1.15.0(注意:/opt/openssl-1.0.2r 提前下载并解压好)

tar xf nginx-1.15.0.tar.gz

cd nginx-1.15.0

.configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_ssl_module --with-http_flv_module --with-http_stub_status_module --with-http_gzip_static_module --with-http_realip_module --with-openssl=/opt/openssl-1.0.2r --with-stream --with-stream_ssl_module

make         # 这里只编译不安装,不要执行make install 命令,编译后的nginx文件在/objs/目录下

5、备份旧版本的nginx的执行程序

mv /usr/local/nginx/sbin/nginx  /usr/local/nginx/sbin/nginx.old

6、替换旧的Nginx的执行程序

cp -a /opt/nginx-1.15.0/objs/nginx /usr/local/nginx/sbin/

7、发送USR2信号给旧版本主进程号,使nginx的旧版本停止接收请求,用nginx新版本接替,且老进程处理完所有请求,关闭所有连接后,停止

kill -USR2 cat /var/run/nginx/nginx.pid

8、查看nginx pid目录,多了个nginx.pid.oldbin文件,存放了旧版本nginx的pid号

ls -l  /usr/local/nginx/logs/

...
nginx.pid
nginx.pid.oldbin
...

9、从容关闭旧进程

kill -QUIT cat /var/run/nginx/nginx.pid.oldbin

10、查看升级后的版本

./usr/local/nginx/sbin/nginx -v              #小写v

nginx version: nginx/1.15.0

至此,nginx热部署完成了。

原文地址:https://blog.51cto.com/10316297/2371939

时间: 2024-11-08 08:44:29

Nginx之热部署的相关文章

nginx负载均衡和tomcat热部署简单了解

简单说下几个名词 nginx 它是一个反向代理,实际上就是一台负责转发的代理服务器,貌似充当了真正服务器的功能,但实际上并不是,代理服务器只是充当了转发的作用,并且从真正的服务器那里取得返回的数据,这个就是nginx的工作内容 tomcat 开源的web服务器 oracle 数据库 redis 缓存系统 nginx负载均衡简介 如图1展示,客户端发起请求,通过nginx代理后,根据权重将请求平均转发到服务器 热部署简介 一般我们只有1个tomcat的时候,如果需要代码包,就需要把tomcat关闭

Tomcat学习总结(8)——Tomcat+Nginx集群解决均衡负载及生产环境热部署

近日,为解决生产环境热部署问题,决定在服务器中增加一个tomcat组成集群,利用集群解决热部署问题. 这样既能解决高并发瓶颈问题,又能解决热部署(不影响用户使用的情况下平滑更新生产服务器)问题. 因为项目是前后端分离的,所以本以为成本很低,没想到遇到了一系列的坑,解决了2天才搞定,发现了很多不是集群而是项目本身的问题. 我是同一个服务器下配置tomcat和nginx等,本文主要面向有一定基础的读者,基本配置就不在本文累述了(基础问题可以留言或者发邮件). 0x0_1 服务器环境 服务器: Cen

Nginx命令行及演示:重载、热部署、日志切割

Nginx命令行: 01 格式:nginx 参数 信号 02 帮助: -?  -h 03 使用指定的配置文件:-c 04 指定配置指令: -g 05 指定运行目录: -p 06 发送信号: -s 立刻停止服务: stop 优雅地停止服务: quit 重载配置文件: reload 重新开始记录日志文件: reopen 07 测试配置文件是否语法错误: -t  -T 08 打印nginx的版本信息.编译信息等: -v  -V 重载配置文件: [[email protected] ~]# cd /op

Nginx+uWSGI+Django部署web服务器

目录 Nginx+uWSGI+Django部署web服务器 环境说明 前言 搭建项目 Django部署 编辑luffy/luffy/settings.py 编辑luffy/app01/views.py 编辑luffy/luffy/urls.py 运行并测试 uWSGI部署 测试运行uWSGI 使用uWSGI运行django项目 uWSGi热加载Djangoa项目 部署nginx nginx配置uwsgi和django django部署static文件 重新加载nginx进行测试 测试nginx

Spring Boot 热部署

需要在pom.xml文件中加如下代码: 1 <dependencies> 2 <dependency> 3 <groupId>org.springframework.boot</groupId> 4 <artifactId>spring-boot-devtools</artifactId> 5 <optional>true</optional> 6 </dependency> 7 </depe

Tomcat热部署的三种方式

热部署是指在你修改项目BUG的时候对JSP或JAVA类进行了修改在不重启WEB服务器前提下能让修改生效.但是对配置文件的修改除外! 1.直接把项目web文件夹放在webapps里. 2.在tomcat\conf\server.xml中的<host></host>内部添加<context/>标签: <Context debug="0" docBase="D:\demo1\web" path="/demo1"

Springboot 热部署中存在冲突的问题

SpringBoot热部署有2中: 1.使用 Spring Loaded 2.使用 spring-boot-devtools 具体怎么用.自己百度! 在使用第一种时候,整合SpringBoot和通用Mapper时候,-----------------> Example 时候会出现找不到实体对应的表! 这就是冲突在的存在,具体怎么解决,我没找到方法!  当然我还是想用热部署的,我就使用了第2种,但是依然也遇到了问题 在我的项目中我加入了redis 注解什么意思自己百度:出现的异常java.lang

spring boot 之热部署(三)

热部署:当发现程序修改时自动启动应用程序. spring boot使用的是spring-boot-devtools是一个为开发者服务的一个模块.其原理用了classLoader 其中一个加载不变的类,另一个restart ClassLoader加载变得类. devtools会监听classpath下的文件变动,并且会立即重启应用(发生在保存时机). 不说废话,我喜欢的Coding就是简单and直接.我写代码一般都是截图,不会粘代码,目的是让你们能敲一遍,我认为程序是敲出来的不是看出来的.你们要懂

IDEA第二章----配置git、tomcat(热部署)、database,让你的项目跑起来

第一节:下载git客户端,整合idea 由于博主公司用的git版本管理,所以本系列都是基于git版本工具的,当然SVN与git配置类似.git同样支持安装版和解压版,支持各种操作系统,我这里下载的是Windows的解压版. 选择刚才解压后的文件夹,选择cmd文件夹下的git.exe,然后点击Test查看是否连接成功. 注:如果没有配置git客户端,用git地址导入项目会提示你找不到git.exe. 第二节:配置tomcat(热部署稍后会讲到) tomcat下载安装就不在累赘,博主用的是tomca