Linux企业化运维--(2)nginx之并发优化、负载均衡+反向代理、平滑升级、算法扩展、限流、配置管理、重定向、防盗链

Linux企业化运维

实验所用系统为Redhat-rhel7.6。

Linux企业化运维–nginx之并发优化、负载均衡+反向代理、平滑升级、算法扩展、限流、配置管理、重定向、防盗链

一、并发优化

ulimit -a 可以查看用户可以打开文件的限制	##open files
sysctl -a | grep file				##打开文件的限制
///fs.file-max = 183593
free -m

请添加图片描述
请添加图片描述

二、负载均衡+反向代理

1、默认轮询

本实验需要打开另外两台快照主机。
server1上做负载均衡反向代理检测语法重启服务,将本机配置好的nginx复制server2主机。

cd /usr/local/nginx/conf/	
vim nginx.conf								##编辑配置文件
///
http {
        upstream westos {					##负载均衡器upstream
        server 172.25.24.2:80;
        server 172.25.24.3:80;
        }

server {
        listen 80;
        server_name www.westos.org;

        location / {
                proxy_pass http://westos;	##反向代理器proxy_pass
                }
        }
}##注意此处http的后括号
///
nginx -t
nginx -s reload

cd ..
cd ..(local)
scp -r nginx/ server2:/usr/local/		##将本机配置好的nginx复制到server2主机

请添加图片描述
请添加图片描述
请添加图片描述

此时在server2主机上,建立软链接以便全局使用nginx,编辑配置文件,将server1中的设定修改回默认值,写入发布内容,在本次尝试是否能访问。

###server2				
ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/	##建立软链接以便全局使用nginx
cd /usr/local/nginx/sbin/
ls
cd ..(nginx)
cd conf/
vim nginx.conf
///
#user  nobody;					##注释掉
worker_processes  auto;

events {
    worker_connections  1024;	##改回默认
}
///
nginx -t						##检测语法
cd ..(nginx)
cd html/
ls
echo server2 > index.html 
nginx
curl localhost					##显示server2

请添加图片描述

请添加图片描述
请添加图片描述

server3主机做相同操作,结果如下。
请添加图片描述

此时在真机上对快照进行地址解析ping通www.westos.org之后便可以使用curl命令查看server主机的发布文件。

###真机
vim /etc/hosts
///
172.25.24.1     server1         www.westos.org
172.25.24.2     server2
172.25.24.3     server3
172.25.24.4     server4
172.25.24.5     server5
172.25.24.6     server6
172.25.24.7     server7
172.25.24.8     server8
172.25.24.9     server9
172.25.24.10    server10
///
ping www.westos.org
curl www.westos.org
##此时server2和server3交替出现,频率相同

请添加图片描述
请添加图片描述
请添加图片描述

2、改变权重,默认为1

server1主机中修改配置文件,增加server2主机的权重,检测语法,重启服务。

###server1------改变权重
cd /usr/local/nginx/conf/
vim nginx.conf
///
http {
        upstream westos {
        server 172.25.24.2:80 weight=2;			##增加权重
///
nginx -t
nginx -s reload

请添加图片描述

在真机上作测试时,server2server3主机则几乎与权重等比出现。

###真机
权重大的则等比显示

请添加图片描述

3、ip_hash

ip_hash对后端做健康检测,如果server3出问题,则调度server2(###模拟问题server3 nginx -s stop)
如果后端全挂,则http报错502(500表示服务器错误)
server1主机中修改配置文件,在负载均衡模块中添加ip_hash,检测语法,重启服务。

vim nginx.conf
///
http {
        upstream westos {
        ip_hash;
///
nginx -t
nginx -s reload

请添加图片描述请添加图片描述

server3主机中关闭nginx服务,以模仿后端该主机出现问题的情况,此时在真机做检测时,则只有server2主机的发布文件。

###server3
nginx -s stop
###真机
只有server2

请添加图片描述
请添加图片描述

server2主机也出现问题时,真机则会报错502,显示服务器错误。

###server2
nginx -s stop
###真机
502

请添加图片描述

4、备用机

当所有后端主机都出现问题时,备用机可以暂时运行,但是风险很高,需要及时修理后端服务器。
server1主机中设定负载均衡中本机可以作为备用机,检测语法,重启服务。同时编辑发布文件。

vim nginx.conf
///
http {
#		ip_hash;					##注释
        server localhost:80 backup;	##备用机
///
nginx -t
nginx -s reload
cd ..
cd html/
ls
echo helloworld > index.html

请添加图片描述

请添加图片描述

当两台后端服务器都不能使用时,则显示server1备用机的发布文件。

###真机
curl www.westos.org	##helloworld

请添加图片描述

如果后端主机恢复,则不会访问备用机。
请添加图片描述

三、平滑升级

  1. 版本升级
    当服务器在运行时,需要升级的情况下,平滑升级即就是不断开服务器就可以进行升级,最大限度保证数据的完整性。
    在server1主机中,修改配置文件,设定工作进程数为2,安装一个比当前版本高的nginx,重新编译(configure--makefile--make三步曲)。
    下载nginx新版本软件,正常执行./configuremake但不要执行make install
##server1
cd /usr/local/nginx/conf/
vim nginx.conf
///
user  nginx;
worker_processes  2;			##设定工作进程数为2
worker_cpu_affinity 01 10;
///
nginx -s reload
cd
lftp 172.25.254.250
> ls
> cd pub/docs/lamp/
> get nginx-1.21.1.tar.gz 		##获取安装包(可以在网络上下载)
> exit
tar zxf nginx-1.21.1.tar.gz
cd nginx-1.21.1/
ls
./configure --prefix=/usr/local/nginx --with-http_ssl_module --with-http_stub_status_module --with-threads --with-file-aio			##重新编译

请添加图片描述

make之后备份旧程序,并拷贝新程序。

make
cd objs/
ls-->nginx
cd /usr/local/nginx/sbin/	
ls-->nginx
cp nginx nginx.old						##备份原程序
cd
cd nginx-1.21.1/			
ls
cd objs/
\cp -f nginx /usr/local/nginx/sbin/		##拷贝新程序

请添加图片描述请添加图片描述

获取当前nginx主进程pid,即master进程。开启新版本。关闭worker进程但保留主进程master

ps ax | grep nginx		##获取当前nginx主进程pid,即master进程
kill -USR2 22602		##开启新版本
ps ax | grep nginx
curl localhost -I		##显示新版本号
kill -WINCH 22602		##关闭worker进程但保留主进程

请添加图片描述

因为有时候我们会发现新版本并没有旧版本用着顺手,那么关闭worker进程但保留主进程就是为了回退,即就是关闭工作端worker,保留master

ps ax | grep nginx
curl localhost -I		##此时依旧显示新版本号

请添加图片描述

  1. 版本回退
    回退的过程是相反的,先还原nginx程序,唤醒原进程,回收新版本,并且关闭。
cd /usr/local/nginx/sbin/
ls
\cp -f nginx.old nginx		##还原nginx程序
kill -HUP 22602				##唤醒原进程
ps ax | grep nginx
kill -WINCH 1040			##回收新版本的worker进程
kill -QUIT 1040				##关闭新版本主进程
ps ax | grep nginx
curl localhost -I

请添加图片描述

四、算法扩展

有时nginx并不支持一些算法,当我们需要使用时,则需要进行扩展。
比如sticky模块,nginx本身不支持,当在配置文件中写入并调用时,会报错。

cd /usr/local/nginc/conf
vim nginx.conf
///
http {
        upstream westos {
        sticky;
        server 172.25.24.2:80 weight=2;
///
nginx -t 	##失败,因为sticky不支持,需进行扩展

请添加图片描述
请添加图片描述
所以我们需要对nginx进行扩展,先将sticky注释掉,并停止服务。

在配置文件中注释掉sticky;
nginx -t 
nginx -s stop

请添加图片描述
请添加图片描述

我通过lftp下载sticky软件包,所以需要在真机对其进行火墙策略的设定。

iptables -t nat -I POSTROUTING -s 172.25.24.0/24 -j MASQUERADE 	##火墙策略(真机)
cd
lftp 172.25.254.250
> ls
> cd pub/docs/lamp/
> get nginx-goodies-nginx-sticky-module-ng-08a395c66e42.zip 
> exit
ls

请添加图片描述

此时需要对软件包解压,方便起见,安装解压软件并解压sticky软件包。

yum install -y unzip
unzip nginx-goodies-nginx-sticky-module-ng-08a395c66e42.zip 
ls

请添加图片描述
请添加图片描述
请添加图片描述

安装好之后切入nginx目录,清理缓存,执行configure->make

cd nginx-1.20.1/
make clean							##清理缓存
./configure --prefix=/usr/local/nginx --with-http_ssl_module --with-http_stub_status_module --with-threads --with-file-aio --add-module=/root/nginx-goodies-nginx-sticky-module-ng-08a395c66e42

make

请添加图片描述
请添加图片描述

nginx复制到sbin并覆盖,切入配置目录,编辑配置文件,取消对sticky的注释并检测语法,但是此时sticky模块会与backup冲突,所以检测失败。

ls
cd objs/
\cp -f nginx /usr/local/nginx/sbin/	##复制覆盖文件,\表示告诉shell不要去查alias,直接执行原本的cp 
vim nginx.conf
nginx -t

请添加图片描述
请添加图片描述
需要将之前的设定注释或删掉,重新检测语法,并开启服务。

vim nginx.conf
///
http {
        upstream westos {
        sticky;
        server 172.25.24.2:80;
        server 172.25.24.3:80;
        #server localhost:80 backup;
///
nginx -t
nginx

请添加图片描述
请添加图片描述

五 、nginx限流

实验素材:
先建立一个目录用于存放实验素材。

cd html/
mkdir download
cd download/
lftp 172.25.254.250
> ls
> cd pub/docs/
> get vim.jpg
> exit
du -h vim.jpg 		##444K

请添加图片描述
请添加图片描述

1、限制并发连接数

在真机执行压力测试命令,设定并发用户数为10,请求总数为10,则失败了4个。

###真机
ab -c10 -n 10 http://172.25.24.1/download/vim.jpg	##并发用户数为10,请求总数为10,失败4个

请添加图片描述
请添加图片描述
请添加图片描述

在server1主机中设定访问下载链接时,受到控制,重启服务。

cd /usr/local/nginx/conf/
vim nginx.conf
///
    #gzip  on;

        limit_conn_zone $binary_remote_addr zone=addr:10m;
    server {
	...
        location /download/ {
                limit_conn addr 1;
        }
///
nginx -s reload

请添加图片描述
请添加图片描述

重新在真机执行压力测试,因为被限流,所以大部分请求被拒绝。

###真机
ab -c10 -n 10 http://172.25.24.1/download/vim.jpg	##大部分被拒绝

请添加图片描述

2、限制每秒请求数

在真机执行压力测试,设定并发用户数为1,请求总数为10,则请求全部通过。

###真机
ab -c1 -n 10 http://172.25.24.1/download/vim.jpg	##全部通过

请添加图片描述

请添加图片描述
在server1主机中编辑配置文件,设定每秒只通过1个请求,重启服务。

###server1
vim nginx.conf
///
    #gzip  on;

        limit_conn_zone $binary_remote_addr zone=addr:10m;
        limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s; 	##设定每秒只能通过一个请求

        location /download/ {
                limit_conn addr 1;
                limit_req zone=one;
        }
///
nginx -s reload

请添加图片描述
请添加图片描述

重新在真机执行压力测试,因为每秒只通过一个,则其余9个被拒绝。

###真机
ab -c1 -n 10 http://172.25.24.1/download/vim.jpg	##只通过一个

请添加图片描述

3、排队,超过指定数量则排队访问

在配置文件中设定一次访问5个,超过的排队等待,因为上一个实验设定每秒通过1个请求,则访问2次,差不多10秒。

vim nginx.conf
///
        location /download/ {
                limit_conn addr 1;
                limit_req zone=one burst=5;	
///
nginx -s reload

请添加图片描述

在真机中,执行压力测试,访问时长大约9秒。

###真机
ab -c1 -n 10 http://172.25.24.1/download/vim.jpg	##时间较久,差不多9秒

[注意] 在真实情况下,偏差在几台主机的情况是可以忽略不计的。

请添加图片描述

4、无延迟

编辑配置文件,设定请求无延迟,在上一个实验的情况下,只能执行1次,即5个请求,重启服务。

vim nginx.conf
///
        location /download/ {
                limit_conn addr 1;
                limit_req zone=one burst=5 nodelay;
///
nginx -s reload

请添加图片描述

在真机中,执行压力测试,只能通过5个,其余被拒绝。

###真机
ab -c1 -n 10 http://172.25.24.1/download/vim.jpg

请添加图片描述

5、限制带宽

现实生活中,我们下载东西时,会被限制网速,其实就是限制带宽。
在配置文件中设定带宽50k,重启服务,注释掉上面实验的参数,不然会很慢。

vim nginx.conf
///
        location /download/ {
                limit_conn addr 1;
                #limit_req zone=one burst=5 nodelay;	##注释掉这条,不然会很慢
                limit_rate 50k;
///
nginx -s reload

请添加图片描述

在真机中执行压力测试,文件大小为444k,访问10次,限制带宽50k,大概需要80s。

###真机
ab -c1 -n 10 http://172.25.24.1/download/vim.jpg

请添加图片描述

六、nginx配置管理

1、自动索引

可以在浏览器访问,下载软件更方便。
在配置文件中设定自动索引,注意注释上文参数设定,重启服务。

vim nginx.conf
///
        location /download/ {
                limit_conn addr 1;
                #limit_req zone=one burst=5 nodelay;
                #limit_rate 50k;		##注释
		autoindex.on;
///	
nginx -s reload

请添加图片描述

在浏览器中访问,可以打开server1主机的指定目录。

在浏览器访问
172.25.24.1/download

请添加图片描述

2、nginx expire 缓存配置

缓存可以降低网站带宽,加速用户访问。
编辑配置文件,设定对图片等进行缓存,缓存时间为1年,在此期间访问就会减少访问时间。

vim nginx.conf
///
        location /download/ {
                limit_conn addr 1;
                #limit_req zone=one burst=5 nodelay;
                #limit_rate 50k;
                autoindex on;
        }	##在此位置下方进行设定

        location ~ .*\.(gif|jpg|png)$ {		##对图片等进行缓存
                expires 365d;
                root html;
        }
///
nginx -s reload

请添加图片描述

在真机中,使用curl命令访问素材文件,可以看到缓存至2022年。

###真机
curl -I 172.25.24.1/download/vim.jpg
///Expires: Thu, 01 Sep 2022 04:53:01 GMT

请添加图片描述

3、日志轮询

编写一个脚本,设定打开nginx时会生成日志文件,命名格式为前一天。

cd /opt/	##第三方软件安装位置
vim nginx.sh
///
#!/bin/bash
cd /usr/local/nginx/logs && mv access.log access_$(date +%F -d -1day).log
kill -USR1 `cat /usr/local/nginx/logs/nginx.pid`
///

请添加图片描述

给脚本执行权限,执行脚本,切入到日志目录,产生日志。

chmod +x nginx.sh
./nginx.sh
cd /usr/local/nginx/logs/
ls --> access_2021-08-31.log	##生成日志

请添加图片描述

4、禁用不必要的日志记录,以节省磁盘IO的消耗

在配置文件中设定禁用浏览器访问指定目录时生成日志文件。

cd ..(nginx)
cd conf/
vim nginx.conf
///
        location ~ .*\.(gif|jpg|png)$ {
                expires 365d;
                root html;
        }		##在这个位置的下面加入设定

        location /status {
                stub_status on;
                access_log off;
        }
///
nginx -t
nginx -s reload

请添加图片描述
请添加图片描述

此时在浏览器中访问该目录,在日志目录中不会生成日志记录。

在浏览器访问
172.25.24.1/status	##刷新会增加访问次数,但不会有日志生成
cd ../logs
ls
cat access.log		##为空

请添加图片描述
请添加图片描述

但当在真机中使用curl命令访问该目录时,会产生日志文件。

###真机
curl -I 172.25.24.1/status

###server1
cat access.log 		##会产生日志文件

请添加图片描述
请添加图片描述

5、站点目录和文件的限制

在配置文件中设定指定目录只能本机访问,拒绝其他所有请求。

cd conf/
vim nginx.conf
///
        location /status {
                stub_status on;
                access_log off;
                allow 127.0.0.1;
                deny all;
        }
///
nginx -t
nginx -s reload

请添加图片描述请添加图片描述

当在真机访问status目录时,拒绝访问,报错403,资源不可用,服务器理解客户的请求,但拒绝处理。

###真机
curl  172.25.24.1/status	##拒绝访问

请添加图片描述
当在server1本机访问时,允许访问。

###server1
curl localhost/status

请添加图片描述

6、中文乱码

nginx默认不支持中文字符,在浏览器访问时,中文会变成乱码。
在nginx发布文件中加入一行中文,在浏览器中试访问,为乱码。

cd ..(nginx)
cd html/
vim index.html
///
helloworld
欢迎
///
#在浏览器访问时中文是乱码

请添加图片描述
请添加图片描述

但是在server1本机中,可以使用curl命令查看本地的发布文件,是可以正常显示中文的。
请添加图片描述

编辑配置文件,设定nginx支持中文字符,并重启服务。

vim nginx.conf
///
    server {
        listen       80;
        server_name  localhost;

        charset utf-8;
///
nginx -s reload

请添加图片描述

此时在浏览器中访问172.25.24.1,可以看到中文正常显示。
请添加图片描述

在真机中对server1主机进行地址解析,使用curl命令访问时,也可以看到发布文件。

在真机做地址解析
vim /etc/hosts
///
172.25.24.1     server1         www.westos.org reg.westos.org
///
curl reg.westos.org

请添加图片描述
请添加图片描述

七、nginx 重定向

1、防止域名恶意解析到服务器IP

1)拒绝访问,报错500

切入配置目录,编辑配置文件,设定在访问本机时,返回500,重启服务。此时使用curl命令访问本机,会显示http报错500。

cd /usr/local/nginx/conf/
vim nginx.conf
///
    server {
        listen       80;
        server_name  localhost;
        return 500;
///
nginx -s reload
curl -I localhost	##HTTP/1.1 500 Internal Server Error

请添加图片描述

请添加图片描述
请添加图片描述

当在浏览器中访问server1主机时,也会报错500。

172.25.24.1--->500 Internal Server Error

请添加图片描述

2)将所有访问重定向至指定域名

编辑配置文件,设定将所有访问请求重定向至指定域名,重启服务。此时使用curl命令访问本机,会显示访问地址为http://www.westos.org

vim nginx.conf
///
    server {
        listen       80;
        server_name  localhost;
        rewrite ^(.*) http://www.westos.org permanent;
///
nginx -s reload
curl -I localhost	##Location: http://www.westos.org

请添加图片描述
请添加图片描述
当在浏览器中访问server1主机时,写入172.25.24.1回车后会自动跳转至www.westos.org
请添加图片描述
请添加图片描述

2、端口重定向

编辑配置文件,将80端口定向到443端口。

vim nginx.conf
///
    server {
        listen       443 ssl;
        server_name  www.westos.org;

        ssl_certificate      cert.pem;
        ssl_certificate_key  cert.pem;

        ssl_session_cache    shared:SSL:1m;
        ssl_session_timeout  5m;

        ssl_ciphers  HIGH:!aNULL:!MD5;
        ssl_prefer_server_ciphers  on;

        location / {
            root   html;
            index  index.html index.htm;
        }
    }
server {
        listen 80;
        server_name www.westos.org;

        rewrite ^/(.*)$ https://www.westos.org/$1 permanent;
        #location / {
        #       proxy_pass http://westos;
        #        }
        }
///

请添加图片描述
请添加图片描述

生成证书,并移动到配置目录中,检测语法,重启服务。此时检测端口。

cd /etc/pki/tls/certs
make cert.pem		##生成证书
mv cert.pem /usr/local/nginx/conf
nginx -t
nginx -s reload
netstat -antlup | grep 443

请添加图片描述
请添加图片描述请添加图片描述

请添加图片描述

在浏览器中访问server1主机,可以看到https即代表443端口重定向成功。

172.25.24.1/index.html--->https://172.25.24.1/index.html

在真机中使用curl命令,可以看到加密端口已打开。
请添加图片描述

curl -I www.westos.org/
curl -I www.westos.org/index.html

请添加图片描述

3、虚拟主机重定向

1)www.westos.org 重定向bbs.westos.org
cd ..(nginx)
cd html
mkdir bbs
mv bbs/ /
vim nginx.conf
///
server {    
        listen 80;
        server_name www.westos.org;
        
        #rewrite ^/(.*)$ https://www.westos.org/$1 permanent;
        rewrite ^/bbs$ http://bbs.westos.org permanent;		
        ##^/bbs$表示匹配以/开头,bbs结尾,,比如www.westos.org/bbs,如果后加其他url,则不能重定向
        rewrite ^/(.*)$ http://bbs.westos.org/$1 permanent;
        ##^/(.*)$表示匹配以/开头,$结尾,后面可以加url,比如www.westos.org/bbs/bbs.html
     
        #location / {
        #       proxy_pass http://westos;
        #       }
        }
server {
        listen 80;
        server_name bbs.westos.org;

        location / {
                root /bbs;
        index index.html;
                }
        }
///
nginx -s reload

请添加图片描述

在真机使用curl命令可以查看。

curl -I www.westos.org/bbs/bbs.html

请添加图片描述

浏览器输入www.westos.org会自动跳转为bbs.westos.org
请添加图片描述

2)bbs.westos.org 重定向www.westos.org
vim nginx.conf
///
server {    
        listen 80;
        server_name www.westos.org;
        
        #rewrite ^/(.*)$ https://www.westos.org/$1 permanent;
        #rewrite ^/bbs$ http://bbs.westos.org permanent;
        #rewrite ^/(.*)$ http://bbs.westos.org/$1 permanent;
     
	if ($host = "bbs.westos.org") {
		rewrite ^/(.*)$ http://www.westos.org/bbs/$1 permanent;
        }
#server {		##全部注释
#        listen 80;
#        server_name bbs.westos.org;
#
#        location / {
#                root /bbs;
#        index index.html;
#                }
#        }
///
nginx -s reload

请添加图片描述
在真机先做地址解析,使用curl命令可以查看。

vim /etc/hosts
///
172.25.24.1     server1         www.westos.org reg.westos.org bbs.westos.org
///
curl -I bbs.westos.org

请添加图片描述
在浏览器中输入bbs.westos.org会自动跳转至www.westos.org/bbs
请添加图片描述

八、防盗链

为了防止图片被恶意盗取

1、server2盗取server1的图片

server2中编辑一发布文件,写入访问该文件时,盗取server1主机中的某一图片。

###server2
cd /usr/local/nginx/html
vim test.html		##盗链文件,盗取server1主机的图片
///
<html>
<body>
<img src = "http://www.westos.org/download/vim.jpg">
</body>
</html>
///

请添加图片描述

此时在真机浏览器中可以直接访问server1的图片,也可以也可以通过访问server2,访问到server1主机的图片。

172.25.24.1/download/vim.jpg
172.25.24.2/test.html

请添加图片描述请添加图片描述

2、设定防盗链

在server1的配置文件中设定当被访问时,返回403报错或者显示指定防盗链图片,重启服务。

###server1
vim nginx.conf
///
server {
    listen 80;
    server_name     www.westos.org;
           location ~ \.(jpg|png)$ {
            valid_referers none blocked www.westos.org;
            if ($invalid_referer) {
                    #return 403;		##返回403
                    rewrite ^/ http://172.25.24.2/daolian.jpg;		##显示指定图片
                      }
          	   }
///
nginx -s reload

请添加图片描述

在真机浏览器进行测试

172.25.24.2/test.html-->指定图片

请添加图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值