Linux NGINX
NGINX:engine X ,2002年开发,分为社区版和商业版(nginx plus )
社区版:分为主线版(开发版,奇数),稳定版(偶数)
Nginx官网:http://nginx.org
NGINX的两大功能:web服务器、反向代理服务器
NGINX和APACHE一样,也是基于模块设计的,使用不同的模块可以实现不同的功能。模块只能静态编译、不能动态加载。
NGINX的架构:一个主进程,若干个子进程。
主进程:接收用户的请求,转发用户请求、监控子进程
子进程:为用户提供服务(真正工作的进程),子进程数量一般设置为cpu的核心数
NGINX的安装:
编译安装:下载源码包进行编译安装
源码包地址:http://nginx.org/en/download.html
案例地址:https://www.cnblogs.com/heyongshen/p/16854271.html
源安装:centos 8和ubuntu 1804仓库中默认带的nginx版本是1.14版本
源下载地址:http://nginx.org/en/linux_packages.html
NGINX的相关参数:
-v 查看版本信息 -V 显示更详细的信息,包括编译参数
-t nginx配置文件语法检查
-c 找到nginx的配置文件
-e 指定错误日志
-g 指定指令,使用自己指定的指令来替代配置文件的指令
例如:nginx配置文件里面的 user nginx; 可以不写在配置文件里面,而是通过nginx -g "user nginx" 来指定。
-s 发送信号,stop、reload等信号
启动NGINX:
可以通过编写systemd的unit文件来交给systemd托管,使用systemctl命令启动
通过NGINX自身的命令来启动:
# 启动nginx nginx 默认就是后台执行
# nginx
说明:如果使用unit文件的方式来托管NGINX,那么不可以在使用nginx自身的命令来启动,会冲突。
NGINX的信号管理:
可以通过ngins -s 给nginx发送指令,从而管理nginx。
kill命令的使用参考:https://www.cnblogs.com/heyongshen/p/16854476.html
#nginx信号控制使用的几个选项
stop 立刻停止服务,相当于信号SIGTERM,SIGINT
quit 优雅的停止服务,相当于信号SIGQUIT
reload 重新加载配置文件,重新生成worker进程,master进程不变,相当于信号SIGHUP
reopen 重新开始记录日志文件,在切割日志时用途较大。相当于信号SIGUSR1
SIGUSR2 平滑升级可执行程序
SIGWINCH 优雅的停止工作进程
说明:
USER1 USER2,作为用户自定义信号,程序可以自定义这2个信号的含义,在收到这2个信号的时候,可以自定义代码进行对着2个信号的处理,nginx的SIGUSR1和SIGUSR2分别代表切割日志与平滑升级。
NGINX的平滑升级和回滚:
NGINX的平滑升级
#实现过程
1.下载并解压源码包 tar -xzf nginx-1.22.1.tar.gz
2.查看原来的编译选项,使用原有编译选项源码编译新版nginx nginx -V
./configure --user=nginx --group=nginx --with-http_ssl_module --with-http_v2_module --with-http_realip_module --with-http_stub_status_module --with-http_gzip_static_module --with-pcre --with-stream --with-stream_ssl_module --with-stream_realip_module --prefix=/apps/nginx
3.执行make进行编译,不执行make install,因为会将旧版本就行覆盖 make -j 4
4.备份旧版本 mv old_file{,.bak}
5.将编译的新版本移动到指定的位置(旧版本所在的位置) cp -a nginx /apps/nginx/sbin/
6.检查新版本的nginx是否正常 nginx -t
7.发送user2信号进行平滑升级(此时两个master共存)kill -USR2 `cat /apps/nginx/run/nginx.pid`
旧版本主进程PID的文件重命名为nginx.pid.oldbin
8.给旧的进程发送信号,关闭老的worker kill -QUIT `cat /apps/nginx/run/nginx.pid.oldbin`
#先关闭旧nginx的worker进程,而不关闭nginx主进程方便回滚
9.#经过一段时间测试,新版本服务没问题,最后退出老的master kill -QUIT `cat /apps/nginx/run/nginx.pid.oldbin`
# 回滚:
#如果升级的版本发现问题需要回滚,可以重新拉起旧版本的worker
kill -HUP `cat /apps/nginx/run/nginx.pid.oldbin`
#最后关闭新版的master
kill -QUIT `cat /apps/nginx/run/nginx.pid`
#移除新版本的nginx,将旧版本的nginx重新命名为nginx,并检查
rm -f nginx ; mv nginx.bak nginx;
#升级nginx
usr2-->winch-->quit--->hub
备份旧版本、将新版本放到nginx正常的安装路径 -- 此时现在系统中运行的仍然是旧版本
进行语法检查,看新版本的nginx是否能正常加载系统中的配置文件
#USR2 平滑升级可执行程序,将存储有旧版本主进程PID的文件重命名为nginx.pid.oldbin,并启动新的nginx
#旧master是新master的父进程
发送usr2信号给旧版本nginx,此时新的nginx会生成新的master和worker,新旧进程的master和worker共存(此时虽然新旧进程都在监听80端口,但是只有新的master才会接收用户的请求。)
#先关闭旧nginx的worker进程,而不关闭nginx主进程方便回滚
优雅关闭旧的worker进程(WINCH信号),逐步关闭worker进程,主进程不退出 。此时就进程的进程编号文件xxx.oldbin
#测试一段时间后,新版本没问题,就可以关闭旧nginx的master进程。
发送QUIT信号可以推出master进程
#此时如果新版本有问题旧可以回滚:因为旧master的父进程没有关闭
通过给旧nginx发送HUP信号重新加载配置文件,重新生成worker进程
#旧master恢复后,关闭新nginx的master进程
NGINX的配置:
nginx的配置文件中,每一个配置都要以分号结尾。
全局配置:
user:指定启动和运行nginx服务的用户
例如:user nginx #指定运行nginx的用户为nginx