一、配置Nginx隐藏版本号
在生产环境中,需要隐藏Nginx等服务的版本信息,以避免安全风险
实验前提前默认安装nginx-1.14.2
[root@localhost nginx-1.14.2]# curl -I 192.168.200.111
HTTP/1.1 200 OK
Server: nginx/1.14.2 #显示了网站服务的软件为nginx,版本1.14.2
Date: Sat, 05 Mar 2022 10:40:14 GMT
Content-Type: text/html
Content-Length: 612
Last-Modified: Sat, 05 Mar 2022 10:39:25 GMT
Connection: keep-alive
ETag: "62233ddd-264"
Accept-Ranges: bytes
[root@localhost nginx-1.14.2]# grep nobody /usr/local/nginx/conf/nginx.conf
#user nobody; #默认用户nobody
[root@localhost nginx-1.14.2]# ps aux|grep nginx|grep -v grep
root 14010 0.0 0.0 20544 608 ? Ss 18:39 0:00 nginx: master process nginx
nobody 14011 0.0 0.1 23072 1628 ? S 18:39 0:00 nginx: worker process
显示了nginx进程的执行用户是nobody
[root@localhost nginx-1.14.2]# ll /usr/local/nginx/
总用量
drwx------ 2 nobody root 6 3月 5 18:39 client_body_temp
drwxr-xr-x 2 root root 333 3月 5 18:39 conf
drwx------ 2 nobody root 6 3月 5 18:39 fastcgi_temp
drwxr-xr-x 2 root root 40 3月 5 18:39 html
drwxr-xr-x 2 root root 58 3月 5 18:39 logs
drwx------ 2 nobody root 6 3月 5 18:39 proxy_temp
drwxr-xr-x 2 root root 19 3月 5 18:39 sbin
drwx------ 2 nobody root 6 3月 5 18:39 scgi_temp
drwx------ 2 nobody root 6 3月 5 18:39 uwsgi_temp
1、修改源码包
[root@localhost ~]# yum -y install pcre-devel zlib-devel openssl-devel gcc gcc-c++ make
[root@localhost ~]# useradd -M -s /sbin/nologin nginx
[root@localhost ~]# tar xf nginx-1.14.2.tar.gz -C /usr/src/
[root@localhost ~]# cd /usr/src/nginx-1.14.2/
[root@localhost nginx-1.14.2]# vim src/core/nginx.h
13 #define NGINX_VERSION "7.0.0 "
14 #define NGINX_VER "IIS/" NGINX_VERSION
[root@localhost nginx-1.14.2]# ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx && make && make install
[root@server02 ~]# ln -s /usr/local/nginx/sbin/nginx /usr/local/bin/
[root@localhost nginx-1.14.2]# echo hello nginx >/usr/local/nginx/html/index.html
[root@localhost ~]# /usr/local/nginx/sbin/nginx
[root@localhost nginx-1.14.2]# curl -I 192.168.200.111
HTTP/1.1 200 OK
Server: iis/7.0.0 #已经更改为iis7.0.0了
Date: Sat, 05 Mar 2022 11:03:09 GMT
Content-Type: text/html
Content-Length: 612
Last-Modified: Sat, 05 Mar 2022 11:02:22 GMT
Connection: keep-alive
ETag: "6223433e-264"
Accept-Ranges: bytes
2、修改配置文件
[root@localhost ~]# vim /usr/local/nginx/conf/nginx.conf
keepalive_timeout 65;
server_tokens off; #放在http段中
[root@localhost ~]# killall -HUP nginx
[root@localhost ~]# curl -I http://192.168.200.111
HTTP/1.1 200 OK
Server: nginx #不显示具体版本号
Date: Thu, 17 Nov 2016 16:14:19 GMT
Content-Type: text/html
Content-Length: 612
Last-Modified: Thu, 17 Nov 2016 16:05:27 GMT
Connection: keep-alive
ETag: "582dd547-264"
Accept-Ranges: bytes
二、修改Nginx用户与组
Nginx运行时进程需要有用户与组身份的支持,以实现对网站文件读取时进行访问控制。Nginx默认使用nobody用户账号与组账号,一般也要进行修改。
Linux 系统为了安全,很多操作和服务的运行都不是运行在 root 用户下面的,而是一个专用的 ID ,这个 ID 一般就是 nobody ,这样就可以把每个服务运行的情况隔离出来。保证不会因为服务器程序的问题而让服务器程序成了黑客的直接操作源(黑客拿下了服务器程序,也仅仅是 nobody 用户而不是 root 用户)。同时也不会影响其他用户的数据。nobody不是用来跑服务,而是用来占坑,权限会有限制,所以一般安装程序时要指定各个程序的用户组并设置相应的权限,一个程序的攻破不会影响到其他程序
1、编译安装时指定(前面安装步骤已经指定用户,无需再重新编译安装)
[root@localhost ~]# useradd -M -s /sbin/nologin nginx
[root@localhost nginx-1.14.2]# ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx && make && make install
2、修改配置文件
[root@localhost ~]# vim /usr/local/nginx/conf/nginx.conf
2 user nginx nginx;
[root@localhost ~]# killall -HUP nginx
[root@localhost nginx-1.14.2]# ps aux|grep nginx
root 17995 0.0 0.1 20544 1344 ? Ss 19:03 0:00 nginx: master process /usr/local/nginx/sbin/nginx
nginx 18129 0.0 0.1 23076 1732 ? S 19:07 0:00 nginx: worker process
#worker process执行用户为nginx了
三、配置Nginx网页缓存时间
当Nginx将网页数据返回给客户端后,可设置资源在客户端缓存的时间,以方便客户端在日后进行相同内容的请求时直接返回,以避免重复请求,加快了访问速度,一般针对静态网页进行设置,对动态网页不用设置缓存时间。可在Windows客户端中使用fiddler查看网页缓存时间。
设置方法:可修改配置文件,在http段、或server段、或者location段加入对特定内容的过期参数。
[root@localhost ~]# vim /usr/local/nginx/conf/nginx.conf
49 location ~ \.(gif|jpg|jpeg|png|bmp|ico)$ {
50 expires 1d; #指定图片格式文件缓存时间为1天(86400秒)
51 }
52 location ~ .*\.(js|css)$ {
53 expires 1h;
54 }
[root@localhost ~]# killall -HUP nginx
[root@localhost ~]# ll /usr/local/nginx/html/
total 124
-rw-r--r-- 1 root root 537 Nov 18 00:05 50x.html
-rw-r--r-- 1 root root 643 Nov 18 00:21 index.html
-rw-r--r-- 1 root root 116309 Nov 14 11:54 linux.png
[root@localhost html]# curl -I 192.168.200.111/linux.png
HTTP/1.1 200 OK
Server: nginx
Date: Sat, 05 Mar 2022 11:32:50 GMT
Content-Type: image/png
Content-Length: 116309
Last-Modified: Sat, 05 Mar 2022 11:30:41 GMT
Connection: keep-alive #启用了连接保持时间
ETag: "622349e1-1c655"
Expires: Sun, 06 Mar 2022 11:32:50 GMT
Cache-Control: max-age=86400 #缓存时间86400(1d)
Accept-Ranges: bytes
四、实现Nginx的日志切割
Nginx日志:
[root@localhost ~]# ls -l /usr/local/nginx/logs/
总用量 12
-rw-r--r-- 1 root root 3584 3月 31 10:02 access.log #访问日志
-rw-r--r-- 1 root root 1575 3月 31 10:02 error.log #错误日志
-rw-r--r-- 1 root root 5 3月 31 09:27 nginx.pid
编写日志切割脚本
[root@localhost ~]# vim /opt/cut_nginx_log.sh
#!/bin/bash
# cut_nginx_log.sh
datetime=$(date -d "-1 day" "+%Y%m%d")
log_path="/usr/local/nginx/logs"
pid_path="/usr/local/nginx/logs/nginx.pid"
[ -d $log_path/backup ] || mkdir -p $log_path/backup
if [ -f $pid_path ]
then
mv $log_path/access.log $log_path/backup/access.log-$datetime
kill -USR1 $(cat $pid_path)
find $log_path/backup -mtime +30 | xargs rm -f
else
echo "Error,Nginx is not working" | tee -a /var/log/messages
fi
[root@localhost ~]# chmod +x /opt/cut_nginx_log.sh
[root@localhost ~]# crontab -e
0 0 * * * /opt/cut_nginx_log.sh
[root@localhost src]# date 03052359.50 #模拟时间到0点0分前10秒
2022年 03月 05日 星期六 23:59:50 CST
[root@localhost opt]# curl 192.168.200.111 #访问网站,产生日志文件内容
[root@localhost src]# ll /usr/local/nginx/logs/
-rw-r--r-- 1 nginx root 0 3月 6 00:00 access.log
drwxr-xr-x 2 root root 33 3月 6 00:00 backup #生成了backup
[root@localhost src]# ll /usr/local/nginx/logs/backup/
-rw-r--r-- 1 nginx root 0 3月 6 2022 access.log-20220305
保存了一个带时间标记的日志文件
[root@localhost src]# date
2022年 03月 06日 星期日
[root@localhost ~]# killall -9 nginx
[root@localhost ~]# rm -rf /usr/local/nginx/logs/nginx.pid
[root@localhost ~]# /opt/cut_nginx_log.sh
Error,Nginx is not working
[root@localhost ~]# tail -1 /var/log/messages
Error,Nginx is not working
面试题讨论:
说明Nginx的访问日志记录在access.log文件中。
1、 如果将access.log重命名为a.log时,新产生的日志写到哪儿?为什么?
答案:日志将会写入到a.log文件中,因为重命名后文件的Inode没有变化,文件系统是根据Inode查找文件的。
2、 如果此时将Nginx服务重启后,新产生的日志写到哪儿?为什么?
答案:日志将会写入到新的access.log文件中,因为重启时会加载Nginx的配置文件,配置文件中是通过文件名指定日志的,所以会创建新的日志。
五、配置Nginx实现连接超时
保持连接(长连接)
在进行HTTP连接前要先建立TCP连接(TCP 3次握手),再建立HTTP连接,当HTTP资源请求结束后,会断开HTTP连接,再断开TCP连接(TCP 4次挥手)。
很多情况下用户访问网站并不是只访问一个资源,可能会打开很多页面,访问很多资源,如果每个资源的访问都这么繁琐,将会造成用户访问慢,服务器压力过大的问题。
解决如上问题的最好办法是开启网站的保持连接功能。在企业网站中,为了避免同一个客户长时间占用连接,造成服务器资源浪费,可以设置相应的连接超时参数,实现控制连接访问时间。
l keepalived_timeout:设置连接保持超时时间,一般可只设置该参数,默认为65秒,可根据网站的情况设置,或者关闭,可在http段、server段、或者location段设置。
[root@localhost ~]# vim /usr/local/nginx/conf/nginx.conf
34 keepalive_timeout 65;
[root@localhost ~]# killall -HUP nginx
六、更改Nginx工作进程数
在高并发场景,需要启动更多的nginx工作进程以保证快速访问,以处理用户的请求,避免造成阻塞。实验前先将cpu核心数设置为2个以匹配此实验
修改配置文件的worker_processes参数,一般设置为CPU的核数
[root@localhost ~]# grep 'core id' /proc/cpuinfo | uniq | wc -l
2
[root@localhost ~]# vim /usr/local/nginx/conf/nginx.conf
3 worker_processes 2;
[root@localhost ~]# killall -HUP nginx
[root@localhost ~]# ps aux | grep nginx | grep -v grep
root 4431 0.0 0.2 45040 1160 ? Ss 00:50 0:00 nginx: master process /usr/local/nginx/sbin/nginx
nginx 4432 0.0 0.3 45492 1844 ? S 00:50 0:00 nginx: worker process
nginx 4433 0.0 0.3 45492 1756 ? S 00:50 0:00 nginx: worker process
配置CPU亲和性:
默认Nginx的多个进程可能跑在一颗CPU核心上,可以分配不同的进程给不同的CPU核心处理,充分利用硬件多核多CPU。在一台4核物理服务器,可以进行下面的配置,将进程进行分配。
worker_cpu_affinity 0001 0010 0100 1000;
七、配置Nginx实现网页压缩功能
Nginx的ngx_http_gzip_module压缩模块提供了对文件内容压缩的功能,允许nginx服务器将输出内容发送到客户端之前进行压缩,以节约网站带宽,提升用户的访问体验,模块默认已经安装。
[root@localhost ~]# vim /usr/local/nginx/conf/nginx.conf
38 gzip on; //开启gzip压缩输出
39 gzip_min_length 1k; //用于设置允许压缩的页面最小字节数
40 gzip_buffers 4 16k; //表示申请4个单位为16k的内存作为压缩结果流缓存,默认值是申请与原始数据大小相同的内存空间来储存gzip压缩结果
41 gzip_http_version 1.1; //设置识别http协议版本,默认是1.1
42 gzip_comp_level 2; //gzip压缩比,1-9等级
43 gzip_types text/plain text/javascript application/x-javascript text/css text/xml application/xml application/xml+rss; //压缩类型,是就对哪些网页文档启用压缩功能
[root@localhost ~]# killall -HUP nginx
八、配置Nginx实现防盗链功能
Nginx防盗链功能也非常强大,在默认情况下只需要进行简单的配置,即可实现防盗处理
实验环境:
资源主机www.source.com 192.168.200.111
盗链主机www.steal.com 192.168.200.112
准备工作
配置dns服务器,确保能正确解析此两个域名
[root@localhost html]# yum -y install pcre-devel zlib-devel bind
[root@server02 ~]# ./configure && make && make install
[root@localhost yum.repos.d]# cat /etc/named.conf
options { directory "/var/named"; };
zone "source.com" IN {
type master;
file "source";
};
zone "steal.com" IN {
type master;
file "steal";
};
[root@server01 named]# cp -p named.localhost source
[root@localhost named]# pwd
/var/named
[root@localhost named]# ll source steal
-rw-r----- 1 root named 165 3月 8 15:10 source
-rw-r----- 1 root named 165 3月 8 15:11 steal
[root@localhost named]# tail -2 source
NS www.source.com.
www A 192.168.200.111
[root@localhost named]# nslookup www.source.com
Server: 192.168.200.111
Address: 192.168.200.111#53
Name: www.source.com
Address: 192.168.200.111
[root@localhost named]# nslookup www.steal.com
Server: 192.168.200.111
Address: 192.168.200.111#53
Name: www.steal.com
Address: 192.168.200.112
1、建立资源主机的测试主页
[root@localhost ~]# vim /usr/local/nginx/html/index.html
<html>
<head>
<title>source page</title>
</head>
<body>
<h1>www.source.com</h1>
<img src="linux.png" />
</body>
</html>
[root@localhost ~]# ls /usr/local/nginx/html/
50x.html error.jpg index.html linux.png
客户机测试:(注意要关闭服务器的防火墙)
2、建立盗链主机的测试主页
[root@localhost ~]# vim /usr/local/nginx/html/index.html
<html>
<head>
<title>steal page</title>
</head>
<body>
<h1>www.steal.com</h1>
<img src="http://www.source.com/linux.png" />
</body>
</html>
客户机测试:
www.steal.com成功通过链接盗用www.source.com的图片,占用了source的带宽和资源
3、资源主机设置防盗链
配置说明:
valid_referers 设置信任网站
l none 浏览器中referer(Referer是header的一部分,当浏览器向web服务器发送请求的时候,一般会带上Referer,告诉服务器我是从哪个页面链接过来的,服务器基此可以获得一些信息用于处理)为空的情况,就直接在浏览器访问图片
l blocked referer不为空的情况,但是值被代理或防火墙删除了,这些值不以http://或https://开头,一般不是从外部来的
[root@localhost ~]# ls /usr/local/nginx/html
error.jpg index.html linux.jpg
[root@localhost ~]# vim /usr/local/nginx/conf/nginx.conf
location ~* \.(wma|wmv|asf|mp3|jpg|gif|png|swf|flv)$ {
valid_referers none blocked *.source.com source.com;
if ($invalid_referer) {
return 403;
}
}
[root@localhost ~]# killall -HUP nginx
第一行:wma|wmv|asf|mp3|jpg|gif|png|swf|flv表示对这些后缀的文件实行防盗链
第二行:none blocked *.source.com source.com; //不区分大小写
表示referers信息中匹配none blocked *.source.com source.com (*代表任何,任何的二级域名)
if{}里面内容的意思是,如果链接不是来自第二行指定的就强制跳转到403错误页面,当然直接返回404也是可以的,也可以是图片。
客户测试:
[root@localhost html]# echo > /usr/local/nginx/logs/access.log
清空日志,访问后再查看日志,可以看到403代码信息
[root@localhost html]# cat /usr/local/nginx/logs/access.log
192.168.200.113 - - [08/Mar/2022:16:10:58 +0800] "GET /linux.png HTTP/1.1" 403 162 "http://www.steal.com/"
九、Nginx 为目录添加访问控制
用户访问控制:使用apache 的 htpasswd 命令来创建密码文件
[root@localhost ~]# yum -y install httpd-tools
[root@localhost ~]# htpasswd -c /usr/local/nginx/.htpasswd benet
New password:
Re-type new password:
Adding password for user benet
[root@localhost ~]# vim /usr/local/nginx/conf/nginx.conf
location / {
auth_basic "Nginx access";
auth_basic_user_file /usr/local/nginx/.htpasswd;
….
}
客户端地址访问控制:
[root@localhost ~]# vim /usr/local/nginx/conf/nginx.conf
location / {
auth_basic "Nginx access";
auth_basic_user_file /usr/local/nginx/.htpasswd;
allow 192.168.200.112;
deny all;
}
客户端访问测试:从192.168.200.112访问将弹出对话框验证,其他主机直接拒绝
十、自定义错误页面
error_page 403 404 /404.html;
location = /404.html {
root html;
}
[root@localhost html]# echo "Sorry,Page Not Found" > /usr/local/nginx/html/404.html
[root@localhost html]# killall -HUP nginx
浏览器访问 http://192.168.200.111/abc
返回结果: Sorry,Page Not Found
#访问不存在的目录显示404报错文本信息
[root@localhost html]# mv index.html index.html1 #将主页改名
[root@localhost html]# ls
404.html 50x.html index.html1 linux.png
[root@localhost html]# pwd
/usr/local/nginx/html
#无主页时显示403报错文本信息
十一、自动索引
location / {
root html;
index index.html index.htm;
autoindex on;
}
[root@localhost html]# killall -HUP nginx
#添加自动索引后,访问不到主页就显示目录下的所有文件列表,不再显示403报错信息
十二、目录别名功能:
location /abc {
alias /var/www/html;
index index.html;
}
[root@localhost html]# killall -HUP nginx
[root@localhost html]# mkdir -p /var/www/html
[root@localhost html]# echo hello benet >/var/www/html/index.html
#服务器根目录下并没有abc目录,由于做了目录别名,访问到了/html目录下,而不会再显示404报错信息了
十三、通过UA实现手机端和电脑端的分离
实现nginx区分pc和手机访问不同的网站,是物理上完全隔离的两套网站(一套移动端、一套pc端),这样带来的好处pc端和移动端的内容可以不一样,移动版网站不需要包含特别多的内容,只要包含必要的文字和较小的图片,这样会更节省流量。有好处当然也就会增加困难,难题就是你需要维护两套环境,并且需要自动识别出来用户的物理设备并跳转到相应的网站,当判断错误时用户可以自己手动切换回正确的网站。
有两套网站代码,一套PC版放在/usr/local/nginx/html/web,一套移动版放在/usr/local/nginx/html/mobile。只需要修改nginx的配置文件,nginx通过UA来判断是否来自移动端访问,实现不同的客户端访问不同内容。
location / {
#默认PC端访问内容
root /usr/local/nginx/html/web;
#如果是手机移动端访问内容
if ( $http_user_agent ~ "(MIDP)|(WAP)|(UP.Browser)|(Smartphone)|(Obigo)|(Mobile)|(AU.Browser)|(wxd.Mms)|(WxdB.Browser)|(CLDC)|(UP.Link)|(KM.Browser)|(UCWEB)|(SEMC-Browser)|(Mini)|(Symbian)|(Palm)|(Nokia)|(Panasonic)|(MOT-)|(SonyEricsson)|(NEC-)|(Alcatel)|(Ericsson)|(BENQ)|(BenQ)|(Amoisonic)|(Amoi-)|(Capitel)|(PHILIPS)|(SAMSUNG)|(Lenovo)|(Mitsu)|(Motorola)|(SHARP)|(WAPPER)|(LG-)|(LG/)|(EG900)|(CECT)|(Compal)|(kejian)|(Bird)|(BIRD)|(G900/V1.0)|(Arima)|(CTL)|(TDG)|(Daxian)|(DAXIAN)|(DBTEL)|(Eastcom)|(EASTCOM)|(PANTECH)|(Dopod)|(Haier)|(HAIER)|(KONKA)|(KEJIAN)|(LENOVO)|(Soutec)|(SOUTEC)|(SAGEM)|(SEC-)|(SED-)|(EMOL-)|(INNO55)|(ZTE)|(iPhone)|(Android)|(Windows CE)|(Wget)|(Java)|(curl)|(Opera)" )
{
root /usr/local/nginx/html/mobile;
}
index index.html index.htm;
}
实验模拟:不同浏览器访问到不同的页面:
[root@localhost html]# mkdir firefox msie
[root@localhost html]# echo "hello,firefox" > firefox/index.html
[root@localhost html]# echo "hello,msie" > msie/index.html
location / {
root /usr/local/nginx/html/firefox;
if ($http_user_agent ~ MSIE|Mozilla) {
root /usr/local/nginx/html/msie;
}
index index.html index.htm;
}
#将原来location /的内容替换为上面内容
[root@localhost html]# killall -HUP nginx
#在linux客户端的火狐浏览器里显示firefox内容
#在windows的ie浏览器里显示msie内容,360浏览器也显示这个内容
十四、nginx平滑升级版本
一、nginx平滑升级概述
随着网站并发访问量越来越高,nginx web 服务器也越来越流行,nginx 版本换代越来越频繁,1.15.2版本的nginx更新了许多新功能,生产环境中版本升级必然的,但是线上业务不能停,此时nginx的升级就是运维的重要工作了。
二、nginx平滑升级原理
多进程模式下的请求分配方式
Nginx默认工作在多进程模式下,即主进程(master process)启动后完成配置加载和端口绑定等动作,fork出指定数量的工作进程(worker process),这些子进程会持续监听端口的文件描述符(fd),并通过在该描述符上添加监听事件来接受连接(accept)。
信号的接收和处理
Nginx主进程在启动完成后会进入等待状态,负责响应各类系统消息,如HUP、USR2等。
Nginx信号简介
主进程支持的信号
QUIT: 等待工作进程结束后再退出
KILL: 强制终止进程
HUP: 重新加载配置文件,使用新的配置启动工作进程,并逐步关闭旧进程。
USR1: 重新打开日志文件
USR2: 启动新的主进程,实现热升级
WINCH: 逐步关闭工作进程
工作进程支持的信号
QUIT: 等待请求处理结束后再退出
三、nginx平滑升级实战
1.查看旧版nginx的编译参数
[root@localhost logs]# nginx -V
nginx version: nginx/1.14.2
built by gcc 4.8.5 20150623 (Red Hat 4.8.5-28) (GCC)
configure arguments: --prefix=/usr/local/nginx --user=nginx --group=nginx
2.编译新版本Nginx源码包,安装路径需与旧版一致,注意:不要执行make install
[root@localhost ~]# tar xf nginx-1.15.9.tar.gz -C /usr/src/
[root@localhost ~]# cd /usr/src/nginx-1.15.9/
[root@localhost nginx-1.15.9]# ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx && make
3.备份二进制文件,用新版本的替换
[root@localhost nginx-1.15.9]# mv /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx.old
[root@localhost nginx-1.15.9]# ls
auto CHANGES.ru configure html Makefile objs src
CHANGES conf contrib LICENSE man README
[root@localhost nginx-1.15.9]# cp objs/nginx /usr/local/nginx/sbin/
4.确保配置文件无报错
[root@localhost nginx-1.15.9]# /usr/local/nginx/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
5.发送USR2信号
向主进程(master)发送USR2信号,Nginx会启动一个新版本的master进程和对应工作进程,和旧版一起处理请求
[root@localhost ~]# ps aux | grep nginx | grep -v grep
root 4108 0.0 0.2 45028 1152 ? Ss 16:58 0:00 nginx: master process /usr/local/nginx/sbin/nginx
nginx 4109 0.0 0.4 45456 2012 ? S 16:58 0:00 nginx: worker process
[root@localhost ~]# kill -USR2 4108
[root@localhost ~]# ps aux | grep nginx | grep -v grep
root 4108 0.0 0.2 45028 1316 ? Ss 16:58 0:00 nginx: master process /usr/local/nginx/sbin/nginx
nginx 4109 0.0 0.4 45456 2012 ? S 16:58 0:00 nginx: worker process
root 6605 0.5 0.6 45196 3364 ? S 17:02 0:00 nginx: master process /usr/local/nginx/sbin/nginx
nginx 6607 0.0 0.3 45624 1756 ? S 17:02 0:00 nginx: worker process
6.发送WINCH信号
向旧的Nginx主进程(master)发送WINCH信号,它会逐步关闭自己的工作进程(主进程不退出),这时所有请求都会由新版Nginx处理
[root@localhost ~]# kill -WINCH 4108
[root@localhost ~]# ps aux | grep nginx | grep -v grep
root 4108 0.0 0.2 45028 1320 ? Ss 16:58 0:00 nginx: master process /usr/local/nginx/sbin/nginx
root 6605 0.0 0.6 45196 3364 ? S 17:02 0:00 nginx: master process /usr/local/nginx/sbin/nginx
nginx 6607 0.0 0.3 45624 1756 ? S 17:02 0:00 nginx: worker process
注意:回滚步骤,发送HUP信号
如果这时需要回退继续使用旧版本,可向旧的Nginx主进程发送HUP信号,它会重新启动工作进程, 仍使用旧版配置文件。然后可以将新版Nginx进程杀死(使用QUIT、TERM、或者KILL)
7.发送QUIT信号
升级完毕,可向旧的Nginx主进程(master)发送(QUIT、TERM、或者KILL)信号,使旧的主进程退出
[root@localhost ~]# kill -QUIT 4108
[root@localhost ~]# ps aux | grep nginx | grep -v grep
root 6605 0.0 0.6 45196 3364 ? S 17:02 0:00 nginx: master process /usr/local/nginx/sbin/nginx
nginx 6607 0.0 0.4 45624 2056 ? S 17:02 0:00 nginx: worker process
8.验证nginx版本号,并访问测试
[root@localhost nginx-1.15.9]# /usr/local/nginx/sbin/nginx -v
nginx version: nginx/1.15.9
#升级时网站没有停,原网站数据可以继续访问
附录:相关资源信息查看
查看CPU信息:/proc/cpuinfo文件
[root@localhost ~]# cat /proc/cpuinfo
processor : 0 #CPU线程数
vendor_id : GenuineIntel
cpu family : 6
model : 61
model name : Intel(R) Core(TM) i5-5300U CPU @ 2.30GHz #CPU的名字及其编号、主频
stepping : 4
microcode : 0x2a
cpu MHz : 2294.691
cache size : 3072 KB
physical id : 0 #物理CPU个数编号,0是第一个,1是第二个
siblings : 1
core id : 0 #CPU核心数编号
cpu cores : 1
apicid : 0
查看内存信息:free
[root@server01 html]# vim /proc/cpuinfo
[root@docker ~]# free -m
total used free shared buff/cache available
Mem: 7822 3565 484 107 3772 3812
Swap: 0 0 0
查看磁盘使用情况:df
[root@localhost ~]# df -hT
文件系统 类型 容量 已用 可用已用% 挂载点
/dev/mapper/centos-root xfs 37G 5.2G 32G 14% /
devtmpfs devtmpfs 471M 0 471M 0% /dev
tmpfs tmpfs 488M 0 488M 0% /dev/shm
tmpfs tmpfs 488M 8.1M 480M 2% /run
tmpfs tmpfs 488M 0 488M 0% /sys/fs/cgroup
/dev/sr0 iso9660 4.2G 4.2G 0 100% /media/cdrom
/dev/sda1 xfs 1014M 157M 858M 16% /boot
mii-tool,ethtool:用于查看、管理物理的网络接口的状态,还可以配置网卡需要的协商方式
[root@bogon ~]# mii-tool ens33
ens33: negotiated 1000baseT-FD flow-control, link ok
标签:nginx,local,企业级,Nginx,html,防盗链,root,localhost,usr From: https://blog.51cto.com/u_15979837/6149545