Nginx基础篇-Nginx 源码编译安装与平滑升级
admin
2024-02-22 21:47:43

Nginx基础篇-Nginx 源码编译安装与平滑升级

Nginx官网下载地址
http://nginx.org/

1.安装依赖包

yum -y install pcre-devel zlib-devel gcc gcc-c++ make

2.创建运行用户、组

useradd -M -s /sbin/nologin nginx

3.编译安装

cd /opt
tar zxvf nginx-1.12.0.tar.gz -C /opt/cd nginx-1.12.0/
./configure \
--prefix=/usr/local/nginx \				      		#指定nginx的安装路径
--user=nginx \										#指定用户名
--group=nginx \										#指定组名
--with-http_stub_status_module						#启用 http_stub_status_module 模块以支持状态统计make && make installln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/		#让系统识别nginx的操作命令

4.检查、启动、重启、停止nginx服务

nginx -t									#检查配置文件是否配置正确
nginx										#启动		
cat /usr/local/nginx/logs/nginx.pid		    #先查看nginx的PID号
kill -3 
kill -s QUIT 						#停止
killall -3 nginx
killall -s QUIT nginxkill -1 						    	#重载
kill -s HUP 
killall -1 nginx
killall -s HUP nginx					  	#日志分隔,重新打开日志文件
kill -USR1 						 	#平滑升级
kill -USR2 

5.添加Nginx系统服务

vim /lib/systemd/system/nginx.service
[Unit]
Description=nginx
After=network.target
[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
ExecStart=/usr/local/nginx/sbin/nginx
ExecrReload=/bin/kill -s HUP $MAINPID
ExecrStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true
[Install]
WantedBy=multi-user.targetchmod 754 /lib/systemd/system/nginx.service		#赋权,除了root以外的用户都不能修改
systemctl start nginx.service
systemctl enable nginx.service

6.全局配置

vim /usr/local/nginx/conf/nginx.conf #user nobody; 					#运行用户,若编译时未指定则默认为 nobody
worker_processes 1; 			#工作进程数量,可配置成服务器内核数 * 2
#error_log logs/error.log; 		#错误日志文件的位置
#pid logs/nginx.pid; 			#PID 文件的位置

7.HTTP配置

http {##文件扩展名与文件类型映射表include       mime.types;##默认文件类型default_type  application/octet-stream;##日志格式设定#log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '#                  '$status $body_bytes_sent "$http_referer" '#                  '"$http_user_agent" "$http_x_forwarded_for"';##访问日志位置#access_log  logs/access.log  main;##支持文件发送(下载)sendfile        on;##此选项允许或禁止使用socke的TCP_CORK的选项(发送数据包前先缓存数据),此选项仅在使用sendfile的时候使用#tcp_nopush     on;##连接保持超时时间,单位是秒#keepalive_timeout  0;keepalive_timeout  65;##gzip模块设置,设置是否开启gzip压缩输出#gzip  on;##Web 服务的监听配置
server {##监听地址及端口listen 80; ##站点域名,可以有多个,用空格隔开server_name www.lic.com;##网页的默认字符集charset utf-8;##根目录配置location / {##网站根目录的位置/usr/local/nginx/htmlroot html;##默认首页文件名index index.html index.htm;}##内部错误的反馈页面error_page 500 502 503 504 /50x.html;##错误页面配置location = /50x.html {root html;}
}
}

8.平滑升级和回滚

nginx编译安装平滑升级的过程

1.将旧Nginx二进制文件换成新Nginx程序文件(注意先备份,新nginx二进制文件只执行make不执行make install)
2.向master进程发送USR2信号
3.master进程修改pid文件名加上后缀.oldbin,成为nginx.pid.oldbin
4.master进程用新Nginx文件启动新master进程成为旧master的子进程,系统中将有新旧两个Nginx
5.主进程共同提供Web服务,当前新的请求仍然由旧Nginx的worker进程进行处理,将新生成的master
进程的PID存放至新生成的pid文件nginx.pid
6.向旧的Nginx服务进程发送WINCH信号,使旧的Nginx worker进程平滑停止
7.向旧master进程发送QUIT信号,关闭老master,并删除Nginx.pid.oldbin文件
如果发现升级有问题,可以回滚∶向老master发送HUP,向新master发送QUIT

9.编译安装nginx新版本1.23.2

cd /opt
tar zxvf nginx-1.23.2.tar.gz -C /opt/cd /opt/nginx-1.23.2/
./configure \
--prefix=/usr/local/nginx \				      		#指定nginx的安装路径
--user=nginx \										#指定用户名
--group=nginx \										#指定组名
--with-http_stub_status_module						#启用 http_stub_status_module 模块以支持状态统计

#只需要make 不需要make install make

10.备份旧的nginx二进制文件,copy新的nginx到usr/local/nginx/sbin/下

#重命名旧的nginx
mv /usr/local/nginx/sbin/nginx nginx.bak#拷贝新的nginx
cp objs/nginx /usr/local/nginx/sbin/
cd /usr/local/nginx/sbin/
ls -ltr

11.检查&发送USR2信号进行平滑升级

#检查
./nginx -t
ps -auxf |grep nginx# 发送 USR2 平滑升级信号
#USR2 平滑升级可执行程序,将存储有旧版本主进程PID的文件重命名为nginx.pid.oldbin,并启动新的nginx
#此时两个master的进程都在运行,只是旧的master不在监听,由新的master监听80
#此时Nginx开启一个新的master进程,这个master进程会生成新的worker进程,这就是升级后的Nginx进程,此时老的进程不会自动退出,但是当接收到新的请求不作处理而是交给新的进程处理。
kill -USR2 `ps -ef | grep "nginx: master process" | grep -v grep | awk '{print $2}'`# 查看最新进程状态
# 可以看到两个master,新的master是旧版master的子进程,并生成新版的worker进程#先关闭旧nginx的worker进程,而不关闭nginx主进程方便回滚
#向原Nginx主进程发送WINCH信号,它会逐步关闭旗下的工作进程(主进程不退出),这时所有请求都会由新
版Nginx处理
kill -WINCH `cat /usr/local/nginx/run/nginx.pid.oldbin`#经过一段时间测试,新版本服务没问题,最后退出老的master
kill -QUIT `cat /usr/local/nginx/run/nginx.pid.oldbin`备注:要是nginx.pid.oldbin文件没有生成,需要自行判断新旧nginx得PID进行上述命令即可

相关内容

热门资讯

杠杆与加密双线引爆港股:T+0... 2025年,香港交易所的ETP(交易所买卖产品)市场像被按下快进键:前九个月日均成交378亿港元,同...
外交部:中非开启外交关系70年... 转自:新华社新华社北京1月8日电(记者曹嘉玥、温馨)外交部发言人毛宁1月8日表示,中非开启外交关系7...
如果用一个流行词来形容过去一年... (来源:上观新闻)这场关于2025年度流行词的讨论,虽然只围绕“印象深刻的词”“个人生活关联”“未来...
开源证券给予生物股份“买入”评... 每经AI快讯,开源证券1月8日发布研报称,给予生物股份(600201.SH)“买入”评级。评级理由主...
中国气象局新组建4支创新团队 日前,中国气象局发布公告,新组建卫星应用和辐射传输模式重点创新团队、天气气候一体化集合预报系统重点创...