目录
一、nginx配置文件
1.配置文件
cd /var/nginx_1.17/conf/
给配置文件语句加高光
mkdir -p ~/.vim
cp -r /root/nginx-1.17.10/contrib/* ~/.vim/
vim nginx.conf
2.nginx配置文件语法
- nginx.conf是由指令和指令块组成
- 每行语句都得有分号结束,指令和参数之间都是有空格分隔的
- 指令快可以由大括号{},组织多条语句
- nginx.conf使用#表示注释符号
- nginx支持用$变量名
- nginx支持include语句
- nginx部分指令支持正则表达式,如rewrite重写
3.include
建立文件夹,每个站点一个conf文件
/var/nginx_1.17/conf
mkdir extra
cd extra/
touch index1.conf
cd ..
vim nginx.conf
加上
include extra/*.conf;
cd extra/
touch www.conf
touch blog.conf
touch bbs.conf
二、nginx.conf参数
1.user参数
ps -ef | grep nginx
工作进程的用户是nobody
vim /var/nginx_1.17/conf/nginx.conf
useradd www
passwd www
nginx -s reload
查看下
ps -ef | grep nginx
2.nginx.conf重要的指令块
核心功能都在http{}指令块里面,http{}块还包含了以下指令
- server{}指令快,对应一个站点配置,反向代理,静态资源站点
- location{},对应一个url
- upstream{},定义上游服务,负载均衡池
3.nginx命令行
nginx启停指令,-s参数,指的是给nginx进程发送某种信号
nginx #初次启动,直接输入nginx,如启动后再执行该命令,就会提示端口冲突
nginx -s stop #停止nginx进程
nginx -s reload #平滑重启,利用reload可以在不重启nginx进程的情况下,重新读取配置文件
4.nginx-master信号传递
- master主进程是不处理请求的,而是分配请求发给worker进程,主进程负责重启,热加载,热部署等等
- master是根据nginx.conf中,worker_process定义启动时创建的工作进程数
- 当worker运行后,master就处于一个等待的状态,等待用户的请求来临,或者系统信号
- 系统管理员可以发送kill指令,或者nginx -s 信号,这样的形式操控nginx
三、nginx热部署功能实践
1.热部署的特点
nginx作为一个优秀的web服务器,优秀的反向代理服务器,并且nginx也支持高可用的特性,nginx还支持热部署的特点。
热部署的特点:再不重启或者关闭进程的情况下,新的应用直接替换旧的应用
比如:更换nginx的二进制版本
2.大致流程
- 备份旧的程序:二进制文件 备份nginx命令
- 覆盖旧的二进制文件
- 发送USER2信号发给旧的master进程
- 发送WINCH信号给旧的master进程
- 发送QUIT信号给旧的master进程
3.环境准备
nginx程序版本
nginx -v
准备一个新的nginx版本
wget http://tengine.taobao.org/download/tengine-2.2.0.tar.gz
nginx工作模式是master-work
刚才所说的nginx支持reload重载,仅仅是nginx的master进程,在检查配置文件正确之后,则更新,错误则会返回异常,正确的情况下也不会更改已经建立的worker,只会等待worker处理完毕请求之后,杀死旧的worker,然后再从新的配置文件中,运行出新的worker(一旦更换了配置文件,reload master主进程,那么手下的worker也就会被换一批了)
nginx还提供了热部署功能,特点是:在不影响用户体验的情况下,进行软件的版本升级,也就是不主动杀死worker,更换软件的二进制命令
4.备份旧nginx二进制文件
cd /var/nginx_1.17/sbin/
mv nginx nginx_1.1.7
5.下载编译安装新的nginx
cd ~
tar -zxvf tengine-2.2.0.tar.gz
cd tengine-2.2.0
./configure --prefix=/var/nginx_1.17 --with-http_ssl_module --with-http_flv_module --with-http_gzip_static_module --with-http_stub_status_module --with-threads --with-file-aio
make && make install
6.检查一下新版的nginx信息
cd /var/nginx_1.17/sbin/
ls
我们有两个版本的nginx了
[root@localhost sbin]# nginx -v
Tengine version: Tengine/2.2.0 (nginx/1.8.1)
[root@localhost sbin]# nginx_1.1.7 -v
nginx version: nginx/1.17.10
7.检查当前nginx状态
ps -ef | grep nginx
8.发送user2信号
此时发送user2信号给旧的master process,租用是使得nginx旧的版本停止接收用户请求,并且切换为新的nginx版本
kill -USR2 8290
9.此时再次检查新的nginx进程状态
ps -ef | grep nginx
10.发送WINCH信号
此时发送WINCH信号,给旧的master进程,让旧的master进程优雅的退出
kill -WINCH ` cat /var/nginx_1.17/logs/nginx.pid.oldbin `