nginx7层反向代理、负载均衡(二)---参数优化

一、nginx参数优化

1、nginx修改默认用户

 vim修改"#user nobody;"

查看进程ps axu

2、nginx设置脚本启动

设置之前不能使用systemctl start nginx等脚本,设置后可以。只需要添加nginx相应的脚本文件即可。

nginx官网查找添加nginx脚本文件方法:添加nginx.service文件在目录/lib/systemd/system/nginx.service

nginx7层反向代理、负载均衡(二)---参数优化_第1张图片

但是/lib是/usr/lib的软连接,所以添加文件地址为/usr/lib/systemd/system/nginx.service

 nginx7层反向代理、负载均衡(二)---参数优化_第2张图片

nginx7层反向代理、负载均衡(二)---参数优化_第3张图片

上述nginx.pid只有nginx进程打开时才存在

 重新加载配置:

systemctl daemon-reload #重新加载某个服务的配置文件,如果新安装了一个服务,归属于 systemctl 管理,要使新服务的服务程序配置文件生效,需重新加载。

由于设置之前使用命令行nginx打开的nginx服务,必须使用命令行nginx -s stop关掉,使用脚本systemctl stop nginx关不掉。但是使用脚本启动systemctl start nginx,可以使用命令行nginx -s stop关掉。说明命令行的等级更高。

配置成功后可以使用脚本设置开机自启:systemctl enable --now nginx.service

3、work进程数和work单个进程并发连接量设置

一个work的并发连接数由1024改为65535(表示每个work同时可以处理的连接量,nginx可以用来解决并发过万连接),但是不会生效。

app上更改:

2.1 work进程更改:1、改为auto,自动设置

                                    2、work线程和cpu核心数(lscpu查看)设置一样。本实验cpu两个线程,work进程设置为2,并且01、10对应起来(此方法好处:这样比较均衡,可以减少上下文切换的损耗,命中率更高,效率更高。)

2.2 work单个进程并发连接量更改为65535

更改server1上nginx配置文件:

 

nginx7层反向代理、负载均衡(二)---参数优化_第4张图片

补充:work进程更改使用方法2:如果是4个cpu核心,则设置4个work线程,且对应的worker cpu affinity参数为0001 0010 0100 1000;

此时reload后单个进程并发连接数=65535并不会生效

此时如果单个进程并发超过1024,日志里面会有大量报错,因为只是更改了app层面的限制,操作系统和内核还有限制。

因为设置限制关系kernel内核限制最大> system操作系统 > app。内核打开文件数由内存等决定(一般20万,满足要求),而操作系统对用户并发打开文件数默认为1024,不满足65535。操作只是在app上更改,操作系统没有更改。

内核查看并发打开文件数为200067,满足65535要求:

操作系统查看并发打开文件限制为1024,不满足65535要求,需要更改:nginx7层反向代理、负载均衡(二)---参数优化_第5张图片

操作系统更改打开文件并发量,热插拔模块即改即生效

更改打开nginx的用户的并发文件数,参数优化1中把nginx默认用户从nobody改为nginx,所以下图使用nginx用户作为程序nginx的打开用户。

4 nginx 平滑升级和版本回退

4.1、平滑升级

nginx之前版本1.20.2,下载新的版本1.21.6,并从原版本平滑升级到1.21.6,平滑升级过程nginx不用停止

下载1.21.6版本,解压;./configure和原版本命令相同;make编译(不要make install)

nginx7层反向代理、负载均衡(二)---参数优化_第6张图片

 

老进程由于做过隐藏版本处理,curl -I localhost访问显示server/;新进程会显示版本nginx/1.21.6

 在nginx安装目录里面,备份原程序:(不能使用mv ,mv结果只有nginx.old,导致没有nginx出错)

 拷贝新程序,并获取当前nginx主进程pid(此时仍是原nginx进程,pid=25971):nginx7层反向代理、负载均衡(二)---参数优化_第7张图片

升级新程序,kill掉原nginx进程,新版本nginx被添加到进程里来(新的pid=26141):

nginx7层反向代理、负载均衡(二)---参数优化_第8张图片 此时测试,还是原来的老进程响应

 nginx7层反向代理、负载均衡(二)---参数优化_第9张图片

新进程平滑接管:kill -WINCH 25971  回收老版本的worker进程

此时测试,新的nginx进程响应

nginx7层反向代理、负载均衡(二)---参数优化_第10张图片

4.2、版本回退

 还原nginx程序:# cp -f nginx.old nginx

唤醒老进程:# kill -HUP 252971nginx7层反向代理、负载均衡(二)---参数优化_第11张图片

此时测试,还是新进程响应nginx7层反向代理、负载均衡(二)---参数优化_第12张图片

 回收新版本的worker进程: kill -WINCH 26141

此时测试,老进程响应

 nginx7层反向代理、负载均衡(二)---参数优化_第13张图片

 关闭新版本主进程: kill -QUIT 26141/kill -9 26141

5 nginx限流:防止服务器崩掉

nginx作Web服务器

5.1:控制单IP线程并发连接数

实验准备:在nginx默认发布目录下创建download 目录,放入一张496K图片(大一点)

nginx7层反向代理、负载均衡(二)---参数优化_第14张图片

压测:客户端38上压测:38上面压测结果不准确,直接去server1上查看日志

-c表示开10个线程,-n表示访问10次,分10个线程访问10次

web服务器server1上查看日志得到压测结果:10次200表示全成功nginx7层反向代理、负载均衡(二)---参数优化_第15张图片

配置nginx.conf:限制并发线程数为1,带宽为50k

nginx7层反向代理、负载均衡(二)---参数优化_第16张图片

 使配置生效:nginx -s reload

再次压测:客户端38上再次压测:

server1查看日志:9此503失败,1次200成功。因为限制线程并发数为 1,开10线程访问10次,只有一个线程成功。nginx7层反向代理、负载均衡(二)---参数优化_第17张图片

5.2 限制单位时间内的请求数目

配置nginx.conf,使配置生效:nginx -s reload

nginx7层反向代理、负载均衡(二)---参数优化_第18张图片

客户端38上再次压测:上一实验限制了线程数为1,故c1线程数=1,否则出错

 server1查看日志:9次失败,因为每秒并发一个,并且只能处理一个

nginx7层反向代理、负载均衡(二)---参数优化_第19张图片

上面改为limit_req zone=one burst=5;压测后查看日志,全部成功burst(表示排队,不管值是多少,都会成功)

再次更改为 limit_req zone=one burst=5 nodelay;压测后查看日志,6次成功(处理完排队的5个后就不处理了)

5.3限制带宽

限制为200k,reload  nginx。

nginx7层反向代理、负载均衡(二)---参数优化_第20张图片

压测访问10次,并发数为1,所以大概20s

nginx7层反向代理、负载均衡(二)---参数优化_第21张图片

6 浏览器自动索引:

设置前访问不到目录: nginx7层反向代理、负载均衡(二)---参数优化_第22张图片

  设置nginx配置:autoindex on

nginx7层反向代理、负载均衡(二)---参数优化_第23张图片

设置完可以nginx7层反向代理、负载均衡(二)---参数优化_第24张图片

7 设置缓存:缓存可以降低网站带宽,加速用户访问。缓存过期时间365d

nginx7层反向代理、负载均衡(二)---参数优化_第25张图片

表示此类文件可以缓存365天,如下显示2023年过期:nginx7层反向代理、负载均衡(二)---参数优化_第26张图片

8 日志轮询:: 频繁访问导致日志太多,所以要每天00:00备份前一天日志,并创建新的

nginx7层反向代理、负载均衡(二)---参数优化_第27张图片

nginxlog.sh文件

nginx7层反向代理、负载均衡(二)---参数优化_第28张图片

crontab -e定时任务文件:

nginx7层反向代理、负载均衡(二)---参数优化_第29张图片

 9 goaccess 日志可视化:

软件安装

# wget https://tar.goaccess.io/goaccess-1.4.tar.gz 下载安装包

# tar -xzvf goaccess-1.4.tar.gz 解压

# cd goaccess-1.4/

# ./configure --enable-utf8 --enable-geoip=legacy 时缺少两个依赖开发包需要安装

# make 编译

# make install 安装

软件使用

# goaccess access.log -o /usr/local/nginx/html/report.html --log-format=COMBINED --real-time-html

 下载安装包,解压,./configure 时

nginx7层反向代理、负载均衡(二)---参数优化_第30张图片

./configure缺少GeoIP和ncursesw,开发包一般都以devel结尾。(可以去阿里云上找到)

依赖包GeoIP没找到,直接lftp,rpm -ivh安装

补充:查找软件开发包方法:一般开发包以-devel结尾

yum search GeoIP;在你的仓库中寻找,关键看搭建的仓库(yum search +软件名或者关键字 //查找相关功能的包,然后下载yum install)

rpm -q GeoIP;-q :仅查询,后面接的套件名称是否有安装;

yum provides */ncursesw反查询文件在什么包中

nginx7层反向代理、负载均衡(二)---参数优化_第31张图片

nginx7层反向代理、负载均衡(二)---参数优化_第32张图片

依赖包 ncursesw找到直接安装

nginx7层反向代理、负载均衡(二)---参数优化_第33张图片

依赖开发包安装完后在goaccess-1.4目录下,执行./configure --enable-utf8 --enable-geoip=legacy ;make;make install完成安装

goaccess使用

nginx7层反向代理、负载均衡(二)---参数优化_第34张图片

 浏览器上访问:当被访问日志增加时,网页实时增加。

nginx7层反向代理、负载均衡(二)---参数优化_第35张图片

10.中文乱码:nginx发布目录indes.html有中文的话浏览器访问乱码,解决nginx.conf中更改nginx7层反向代理、负载均衡(二)---参数优化_第36张图片nginx7层反向代理、负载均衡(二)---参数优化_第37张图片

浏览器缓存清理后在次访问

nginx7层反向代理、负载均衡(二)---参数优化_第38张图片

11.监控访问状态:nginx7层反向代理、负载均衡(二)---参数优化_第39张图片nginx7层反向代理、负载均衡(二)---参数优化_第40张图片

12.日志禁用和访问控制:nginx7层反向代理、负载均衡(二)---参数优化_第41张图片

站点目录和文件的限制:

 location ~ ^/images/.*\.(sh|php)$

                 {                 deny all;         }

以images开头,sh和ph结尾的全部禁止访问。

 13.SSL模块使用:使nginx发布目录可以被加密访问

打开注释并更改:

nginx7层反向代理、负载均衡(二)---参数优化_第42张图片

nginx -t 缺少证书,创建证书,nginx7层反向代理、负载均衡(二)---参数优化_第43张图片

 使用Makefile文件make

nginx7层反向代理、负载均衡(二)---参数优化_第44张图片

nginx开放443端口,可以加密访问,curl -k加密访问

nginx7层反向代理、负载均衡(二)---参数优化_第45张图片

 浏览器加密访问nginx7层反向代理、负载均衡(二)---参数优化_第46张图片

1.3第4

14.nginx 重定向

防止域名恶意解析到服务器IP: 将大量域名绑定到服务器的IP上,会耗消网站的流量

所以当访问ip时后,返回500错误

访问IP时,默认由第一个虚拟主机进行处理,http{}里有很多server{}

server {  listen 80; 

        server_name   _; 

        return 500; 

也可以重定向,返回域名:

server {  listen 80;

          server_name   _; 

           rewrite ^(.*) http://www.westos.org permanent; 

 两次更改配置文件内容和结果

nginx7层反向代理、负载均衡(二)---参数优化_第47张图片

nginx7层反向代理、负载均衡(二)---参数优化_第48张图片14.1 80重定向443:

nginx7层反向代理、负载均衡(二)---参数优化_第49张图片nginx7层反向代理、负载均衡(二)---参数优化_第50张图片

 14.2 www.westos.org/bbs 重定向bbs.westos.org:(例如CCTV6有独立的域名,CCTV包含各种cctv频道,想使用CCTV/6 来访问CCTV6;www.westos.org/bbs时老的访问方法,bbs.westos.org时新的域名,想使用老的方法访问新的域名)

把bbs.westos.org域名添加到172.25.254.1上

nginx7层反向代理、负载均衡(二)---参数优化_第51张图片

nginx7层反向代理、负载均衡(二)---参数优化_第52张图片

nginx7层反向代理、负载均衡(二)---参数优化_第53张图片

14.3bbs.westos.org 重定向www.westos.org/bbs:nginx7层反向代理、负载均衡(二)---参数优化_第54张图片

nginx7层反向代理、负载均衡(二)---参数优化_第55张图片

nginx7层反向代理、负载均衡(二)---参数优化_第56张图片

15nginx 防盗链

盗链:server1上有图片,server2上在httpd发布目录里面写入server1图片地址,就可以直接访问server2域名来看到server里面的图片,防盗连即在server1 nginx配置文件中写入相应参数来禁止访问server2查看server1上图像。

server1上图像地址:

 

 38主机域名访问:

nginx7层反向代理、负载均衡(二)---参数优化_第57张图片盗链:更改server2httpd发布目录/var/www/html/index.html,访问ip172.25.254.2来查看server1上图片

nginx7层反向代理、负载均衡(二)---参数优化_第58张图片

nginx7层反向代理、负载均衡(二)---参数优化_第59张图片

在38主机/etc/hosts给server2解析:nginx7层反向代理、负载均衡(二)---参数优化_第60张图片

 访问server2域名来查看server1图像:nginx7层反向代理、负载均衡(二)---参数优化_第61张图片

 防盗连:

正常域名访问可以,其他域名不可以。server1上更改

nginx7层反向代理、负载均衡(二)---参数优化_第62张图片

1、return 403时(下图所示)

nginx7层反向代理、负载均衡(二)---参数优化_第63张图片

2、还可以重定向到其他站点,防止消耗本站点流量:重定向到bbs.westos.org

 nginx7层反向代理、负载均衡(二)---参数优化_第64张图片放入想展示的图片,路径在/bbs

nginx7层反向代理、负载均衡(二)---参数优化_第65张图片

 nginx7层反向代理、负载均衡(二)---参数优化_第66张图片

nginx官方文档:

Limiting Access to Proxied HTTP Resources | NGINX Plus

你可能感兴趣的:(linux,运维,nginx)