nginx反向代理负载均衡的补充&&nginx服务常规配置


前言

本节首先补充反向代理负载均衡中的nginx模块编译,虚拟主机和安全控制,其中安全控制中重点归纳:限制并发连接、限制请求数、限制速率;另外,总结nginx中的服务常规设置,包括:https的配置、自动索引、缓存配置、站点限制、中文乱码、日志轮转以及重定向;本节过后,更加全面的了解nginx的功能,并熟悉如何去管理nginx。
nginx官方网址:https://docs.nginx.com/nginx/admin-guide/security-controls/controlling-access-proxied-http/


一、反向代理负载均衡补充

1.nginx模块编译

nginx模块编译:当功能缺失的时候,通过另外一种方式进行追加;源码功能上的重新编译,从而获取新的功能
cookie适合有CDN(服务端主机的访问地址是CDN,理解为调度器的ip去访问后端)和中间有反向代理的架构;ip_hash不能拿到真正的客服端地址,拿到的是CDN或者调度器的ip,所以没有办法对客户端ip的访问进行均衡

先停止nginx服务
[root@server1 conf]# nginx  -s stop
解压包
[root@server1 ~]# yum install -y unzip
[root@server1 ~]# unzip nginx-goodies-nginx-sticky-module-ng-08a395c66e42.zip
本实验nginx版本为nginx-1.22.1,故cd后,清理后进行重新编译(用到解压后的文件)
[root@server1 ~]# cd nginx-1.22.1/
[root@server1 nginx-1.22.1]#  make clean
[root@server1 nginx-1.22.1]# ./configure --prefix=/usr/local/nginx --with-http_ssl_module --with-http_stub_status_module  
--add-module=/root/nginx-goodies-nginx-sticky-module-ng-08a395c66e42
[root@server1 nginx-1.22.1]# make    ##把此模块的功能和二进制程序进行重新编译,生成新的二进制程序
复制编译好的文件对nginx-1.22.1版本文件进行覆盖
[root@server1 nginx-1.22.1]# \cp -f objs/nginx  /usr/local/nginx/sbin/nginx
修改配置文件文件
[root@server1 objs]# cd /usr/local/nginx/conf/
[root@server1 conf]# vim nginx.conf
... 
 upstream westos {
        #ip_hash;    ##根据ip来源进行负载均衡,来自同一个客服端的服务器,就发往同一个后端服务器
                     ##客户端请求不需要在服务端来回切换,比较适合实际生产环境;但是不支持backup
        sticky;      ##基于cookie的负载均衡,设置前需要将第三方模块和nginx源码进行编译,nginx -t语法检测才可
                     ##如果是nginxplus,商业版本,则该模块已编译好,不需要手动编译
        server 192.168.117.12 weight=2;     ##加权重
        server 192.168.117.13:8080;
        #server 192.168.117.11:8080 backup;
    }
    检测语法
[root@server1 conf]# 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
启动服务
[root@server1 conf]# nginx
测试:
必须通过浏览器测试
使用浏览器测试 按F12,进行刷新可以查看cookie值

在这里插入图片描述

2.虚拟主机:基于域名

[root@server1 objs]# cd /usr/local/nginx/
[root@server1 nginx]# mkdir /www1/
[root@server1 nginx]# echo web1 > /www1/index.html
[root@server1 nginx]# vim conf/nginx.conf
http {
...
server {                                   ##文件最下面新建,类似于一个虚拟主机
        listen 80;                         ##通过www1.westos.org可查询到
        server_name www1.westos.org;

        location / {
                root /www1;
                index index.html;
        }
}
}

[root@server1 nginx]# nginx  -s reload

测试:server4

[root@server4 ~]# vim /etc/hosts
192.168.117.11   server1 www1.westos.org

[root@server4 ~]# curl  www1.westos.org
web1

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
如果访问ip,将会由第一个主机进行处理,第一个主机进行了反向代理,测试效果如下:
在这里插入图片描述

二、安全控制

策略网站:https://docs.nginx.com/nginx/admin-guide/security-controls/controlling-access-proxied-http/

1.限制并发连接

[root@server1 nginx]# cd html/
[root@server1 html]# mkdir download
[root@server1 ~]# cp vim.jpg /usr/local/nginx/html/download/

[root@server1 nginx]# vim conf/nginx.conf
http {
...
limit_conn_zone $binary_remote_addr zone=addr:10m;

server {
...
location / {                          ##“/”根目录或当前目录(即为/usr/local/nginx/html/)
            root   html;
            index  index.html index.htm;
            #proxy_pass http://westos;
        }

		location /download/ {         ##/usr/local/nginx/html/下的目录
            	 limit_conn addr 1;
        	}
	}
}

在这里插入图片描述

[root@server1 nginx]# nginx  -s reload
server4中测试:必须单线程下载,超出的并发连接会失败
[root@server4 ~]# ab -c 10 -n 10 http://192.168.117.11/download/vim.jpg
                           ##-c  并发10个   -n处理10个请求
server1中查看日志(200表示正常访问)
[root@server1 nginx]# cat logs/access.log

给了1个,成功会显示2个
并发1个,处理10个会成功访问
在这里插入图片描述

2.限制请求数

[root@server1 nginx]# vim conf/nginx.conf
http {
...
limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s; ##rate=1r/s:每秒处理1个

server {
		location /download/ {
            	 limit_conn addr 1;
		limit_req zone=one burst=5 nodelay; ##burst=5排队数为5;nodelay:不做延迟,即超出队列的直接失败
        	}
	}
}

在这里插入图片描述

[root@server1 nginx]# nginx  -s reload
server4中测试
超出的请求数会失败
[root@server4 ~]# ab -c 1 -n 10 http://192.168.117.11/download/vim.jpg

在这里插入图片描述在这里插入图片描述

3.限制速率

[root@server1 nginx]# vim conf/nginx.conf
http {
...
server {
		location /download/ {
            	 limit_conn addr 1;
		limit_rate 100k;            ##每秒100k
        	}
	}
}

在这里插入图片描述

[root@server1 nginx]# nginx  -s reload
测试
[root@server4 ~]# ab -c 1 -n 5 http://192.168.117.11/download/vim.jpg

在这里插入图片描述

三、nginx服务常规配置

1.https配置

[root@server1 conf]# cd /etc/pki/tls/certs
[root@server1 certs]# make cert.pem —创建自签名证书
在这里插入图片描述
[root@server1 certs]# mv cert.pem /usr/local/nginx/conf/
[root@server1 certs]# cd /usr/local/nginx/conf/
[root@server1 conf]# vim nginx.conf
在这里插入图片描述
[root@server1 conf]# nginx -s reload
在这里插入图片描述
测试
[root@server4 ~]# curl -k https://www1.westos.org ##—k跳过证书
web1
在这里插入图片描述

2.自动索引

在这里插入图片描述

在这里插入图片描述

3.缓存配置

缓存做网页的加速,应用层读完盘后缓存

location ~ .*.(gif|jpg|png)$ {
expires 365d;
root html;
}
在这里插入图片描述
gif/jpg/png格式的图片,过期时间为365天,nginx自动缓冲
测试:查看信息
可以看到过期时间
在这里插入图片描述

4.站点限制

  location /status {
                stub_status on;			    #启用监控模块
                access_log off;				#禁用日志记录
                allow 127.0.0.1;			#只允许本机访问
                deny all;					#禁用所有主机访问
        }

在这里插入图片描述

其他类型:
caaetps:允许TCP连接多少个
handled:TCP三次握手
requests:请求数

在这里插入图片描述

在这里插入图片描述

5.中文乱码

在这里插入图片描述
加中文在这里插入图片描述
现象
在这里插入图片描述
在这里插入图片描述
[root@server1 conf]# nginx -s reload
测试
在这里插入图片描述

6.日志轮转

[root@server1 ~]# vim /opt/nginx_log.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`     ##重新生成新的日志文件

[root@server1 ~]# chmod +x /opt/nginx_log.sh
[root@server1 ~]#  /opt/nginx_log.sh

[root@server1 ~]# cd /usr/local/nginx/logs/
[root@server1 logs]# ls
access_2023-02-21.log  access.log  error.log  nginx.pid

结合crontab周期化调用:凌晨执行/opt/nginx_log.sh
根据实际业务需求调整周期
[root@server1 ~]# crontab -e
00 00 * * * /opt/nginx_log.sh

在这里插入图片描述

7.重定向

(1)80重定向到443

[root@server1 conf]# vim nginx.conf
...
server {
        listen 80;
        server_name www1.westos.org;
        rewrite ^/(.*)$ https://www1.westos.org/$1 permanent;

        location / {
                root /www1;
                index index.html;
        }
}
...
[root@server1 conf]# nginx -s reload

在这里插入图片描述
网页不能访问此实验域名,因为Windows没有解析,如果用哪个ip测试,则默认访问第一个虚拟主机,此实验只针对域名做了重定向
在这里插入图片描述

(2)www1.westos.org/bbs 重定向bbs.westos.org

反向如下图
在这里插入图片描述

[root@server1 conf]# mkdir /bbs
[root@server1 conf]# echo bbs.westos.org > /bbs/index.html

在这里插入图片描述

[root@server1 conf]# nginx -s reload
在这里插入图片描述

8.防盗链

配置server2上的apache服务,盗链server1上的图片
[root@server2 ~]# cd /var/www/html/
[root@server2 html]# vim index.html
<html>
<body>
<img src="http://www1.westos.org/vim.jpg"/>
</body>
</html>
配置nginx网页防盗链
[root@server1 bbs]# ls
daolian.jpg  index.html       ##daolian.jpg为实验中最终看到的图片
[root@server1 conf]# vim nginx.conf
...
location ~ \.(jpg|png)$ {
                root /www1;
                valid_referers none blocked www1.westos.org;
                if ($invalid_referer) {
                        #return 403;
                        rewrite ^/ http://bbs.westos.org/daolian.jpg;
                }
        }

访问jpg或png格式的图片,来自www1.westos.org网站,可以正常访问
其他网站访问jpg或png格式的图片,重定向bbs.westos.org/daolian.jpg(daolian.jpg提前放入的图片)
在这里插入图片描述

测试:两种方法选其一
server4测试机安装图形,使用浏览器测试
[root@server4 ~]# yum groupinstall 'Server with GUI'
或其他虚拟机Firefox中测试即可

注意:解析的server2的daolian.westos.org地址任意,在server4访问解析的地址即可,默认会访问到server2的http中的html文件,根据策略,访问到server1,但是server1有防盗链,仅允许来自www1.westos.org网站访问,从而重定向到提前放好的图片处,就看到测试效果了

添加解析
[root@server4 ~]# vim /etc/hosts
192.168.117.12   server2 daolian.westos.org        
192.168.117.11  server1 bbs.westos.org  www1.westos.org

在这里插入图片描述


  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值