一、并发优化
ulimit -a
##open files:1024,用户可以打开的最大文件数量
sysctl -a | grep file
free -m
二、负载均衡
1. 默认轮询
vim /usr/local/nginx/conf
nginx -t ##检查文件中有没有语法错误
nginx -s reload ##重启服务
scp -r nginx/ xyf2:/usr/local scp -r nginx/ xyf2:/usr/local 在sever2和sever3中做以下操作: ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin ##建立nginx链接到/usr/local/sbin下便于全局使用nginx指令 vim /usr/local/nginx/conf/nginx.conf,文件的修改如下图:
echo sever > /usr/local/nginx/html/index.html
编辑解析文件:
vim /etc/hosts
在sever1中执行以下指令:
curl www.westos.org
2.改变权重
vim /usr/local/nginx/conf/nginx.conf
权重的默认值是1,改变权重后,权重值大的出现频率相对高,反之则低。
此时,权重大的sever2与sever3出现的频率比,接近于权重比
3.ip_hash
ip_hash 对后端进行健康检测,当后端出现问题后,会调度到其他后端。当所有后端出现问题时,则会出现502类型的服务器报错。
关闭掉目前有的两个后端。
4.备用机
在sever1中:
vim /usr/local/nginx/conf/nginx.conf cd /usr/local/nginx/html echo hello world > index.html
三、平滑升级
平滑升级是为了在升级服务版本时,不影响服务的正常使用。服务在不停止的情况下,换代升级。
需要在sever1主机中,设定可进行的进程数为2,安装一个版本更高的nginx,重新编译、make。
nginx -s reload cd ~ lftp 172.25.254.250 get 高于现有nginx的压缩包 exit tar zxf 高版本nginx压缩包 cd 高版本nginx解压后的目录中 ./configure --prefix=/usr/local/nginx --with-http_ssl_module --with-http_stub_status_module --with-file-aio ##编译 make
完成后,对旧版本的nginx进行备份,并拷贝新的nginx。
cd 旧版本的nginx目录中 cd /usr/local/local/sbin cp nginx nginx.old
备份完成后
cd 高版本nginx目录中 cd objs \cp -f nginx /usr/local/nginx/sbin ##拷贝新程序
ps ax | grep nginx ##获取当前版本nginx主进程pid,及master进程。
kill -USR2 5438
##开启新版本
kill -WINCH 7010
kill -WINCH 7011
关闭worker进程
curl -I localhost ##查看版本号。
版本回退,操作和平滑升级是一样的。
四、算法扩展
vim /usr/local/nginx/conf/nginx.con为上图中的样子。
这时由于sticky语法模块,nginx并不支持,nginx.conf文件语法检测错误。
想要让sticky模块被nginx识别,要先对nginx进行扩展。
注释掉文件中的sticky,停掉nginx的服务。
下载sticky模块包:lftp 172.25.254.250
解压完成后。
cd /nginx-1.20.1 make clean ./configure --prefix=/usr/local/nginx --with-http_ssl_module --with-http_stub_status_module --with-file-aio --add-module=/root/nginx-goodies-nginx-sticky-module-ng-08a395c66e42 make cd objs \cp -f nginx /usr/local/nginx/sbin/
做完这些操作后,vim /usr/local/nginx/conf/nginx.conf
解开sticky的注释。
这时,nginx服务可以成功开启了。证明sticky模块扩展成功。
五、限流
限制并发连接数
ab -c10 -n100 http://172.25.37.1/download/vim.jp
vim /usr/local/nginx/conf/nginx.conf
nginx -s reload
##更改配置文件后,重启服务
请求通过时,失败报告变多。
限制每秒请求数量
在真机测试时,做完每秒限制后,因为每秒通过一个请求,其他请求都被拒绝。
nginx -s relaod
##更改完配置文件后,重启服务。
限制每次访问请求数量,排队
nginx -s relaod
##更改完配置文件后,重启服务
此时,发起请求时,会出现提示等待界面。
请求时间,也会变长。因为之前做过每秒只允许通过一个请求的限制,且一次访问只处理5个请求。除了第一个请求不需要排队外,完成所有请求大约要9秒左右。
无延迟
无延迟的设定,意思是在有访问时不考虑等待时间的问题。只处理第一时间可以处理的请求。之前设定过第一时间只处理5个请求。在这基础上,除了第一个请求以及之后的5个请求,一共6个请求。剩下的请求会失败。
nginx -s reload
####更改完配置文件后,重启服务。
限制带宽
我们平日里在网盘或者其他资源分享途径下载时,发现最开始很快。但最终下载速度会被维持在一个稳定的区间内。这个其实就是受到带宽限制的影响。
这里限制带宽每秒200k。
我们访问的文件大小为444k,共访问10次,算下来结束这次访问大约需要20秒左右。(之前做过的无延迟设定要注释掉。)
六、配置管理
自动索引
自动索引的设定,可以在访问浏览器时,更加方便,简单。很大程度上避免了使用过程中繁琐地输入步骤。
nginx -s relaod
##更改完设定后重启服务。
测试:
在浏览器搜索172.25.37.1/download
nginx exprie 缓存配置
缓存可以降低网络的带宽,提高访问的速度。
配置文件中编辑缓存时间为365天。
真机中测试:
curl -I 172.25.37.1/download/vim.jpg
显示缓存时间最终到2022年的8月26号。
日志轮询
cd /opt/ ##该目录是系统自有的
vim nginx.sh
#!/bin/bash
cd /usr/local/nginx/logs && mv access_$(date +%F -d -1day).log
kill -USR1 `cat /usr/local/nginx/logs/nginx.pid`
cd /usr/local/nginx/logs
ls —-> access__2021-09-04.log
日只记录管理,节省磁盘的io消耗
vim /usr/local/nginx/conf/nginx.conf
nginx -s reload
##更改完配置文件后,重启服务。
测试:
网页搜索:172.25.37.1/status
站点目录和文件限制
vim /usr/local/nginx/conf/nginx.conf
(deny这一行得注释掉)
nginx -s reload
##更改完配置文件后,重启服务
测试:真机与sever(172.25.37.1)
curl localhost/status
真机:
sever1:
配置文件中设定只允许172.25.37.1这台主机可以访问,其他反访问请求全部拒绝。
中文乱码解决
nginx不支持中文字符的,在访问浏览器时,中文默认会成为乱码。
cd /usr/local/nginx/html vim index.html: hellow world 您好世界
网页搜索:172.25.37.index.html
可以给看到,“您好世界”这个中文字符串是乱码。
配置文件中编入charset utf-8,重启服务后。nginx服务就会支持中文。
此时浏览器访问:172.25.37.1/index.html:
中文乱码的问题得到解决。
七、重定向
1、防止域名恶意解析到服务器ip
拒绝访问,报错类型为500
nginx -s reload
##更改配置文件后,重启服务
测试:
浏览器访问:172.25.37.1
报错类型为500。
将所有访问重定向到指定域名
vim /usr/local/nginx/conf/nginx.conf
nginx -s reload
##更改配置文件后,重启服务
2、端口重定向
编辑配置文件,将80端口定向到443端口
cd /etc/pki/tls/certs make cert.pem mv cert.pem /usr/local/nginx/conf nginx -t nginx -s reload netstat -antlp | grep nginx
测试:
curl -I www.westos.org
3、虚拟主机重定向
!!!注意解析文件的编写!!!
www.westos.org重新定向到bbs.westos.org
vim /usr/local/nginx/conf/nginx.conf
nginx -s reload
测试:
curl -I www.westos.org
浏览器,输入www.westos.org,会跳转到bbs.westos.org
bbs.westos.org重定向www.westos.org
nginx -s reload
测试:
curl -I bbs.westos.org
浏览器,输入bbs.westos.org,会跳转到www.westos.org/bbs