当前位置: 代码迷 >> 综合 >> 企业运维 --- LAMP架构(nginx [2] 限流、配置管理、访问控制)
  详细解决方案

企业运维 --- LAMP架构(nginx [2] 限流、配置管理、访问控制)

热度:13   发布时间:2023-12-24 23:08:14.0

目录

  • 一、nginx限制
    • 1.控制并发数量
    • 2.限制请求率
    • 3.限制带宽
  • 二、nginx配置管理
    • 1.自动索引
    • 2.缓存配置
    • 3.日志轮询
    • 4.禁用不必要的日志记录
  • 三、nginx访问控制
    • 1.nginx重定向
    • 2.80端口重定向到443端口
    • 3.www.westos.org/bbs 重定向到bbs.westos.org
    • 4.bbs.westos.org重定向到www.westos.org/bbs
    • 5.nginx防盗链

一、nginx限制

1.控制并发数量

nginx可以通过limit_conn_zone 和limit_req_zone两个组件对客户端访问目录和文件的访问频率和次数进行限制;

当不做nginx限流时;
首先server1从服务器下载一张大小为444k的图片,用于访问测试
请添加图片描述
请添加图片描述
将下载的图片放入download目录
请添加图片描述
使用ab命令做压力测试,设定总共有10个请求(-n),由10个线(-c)并发来发送请求;
可以看到请求都成功处理
请添加图片描述
查看server1日志,可以看到http协议响应状态返回值为200,表明该请求被成功地完成,所请求的资源发送到客户端。
请添加图片描述

修改配置文件:
$binary_remote_addr :表示通过remote_addr这个标识来做限制
zone=addr:10m :表示生成一个大小为10M,名字为addr的内存区域
请添加图片描述
设定客户端访问/download目录内容时,启用限制并发的模块;
limit_conn addr 1; 限制并发数为1
请添加图片描述

请添加图片描述
再次进行压力测试,因为只能处理一个并发,所以会有失败
请添加图片描述
查看server1日志,可以看到http协议响应状态返回值只有一个为200,503表示无法获得服务。
请添加图片描述
当限制并发数为5时
请添加图片描述
请添加图片描述
再次进行压力测试
请添加图片描述
请添加图片描述
只有一半的请求被成功处理
请添加图片描述

2.限制请求率

继续修改配置文件,设定 limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;
$binary_remote_addr 表示保存客户端IP地址的二进制形式;
rate=1r/s表示允许相同标识的客户端的访问频次,这里限制的是每秒1次请求;

limit_req的参数,zone=one 表示这个参数对应的全局设置就是one的那个内存区域
请添加图片描述
可以看到,客户端只有一个请求能被处理
请添加图片描述

显然这样并不合适,请求仅限于符合limit_req_zone 指令中定义的速率。如果请求数量超过指定的速率并且共享内存区域已满,NGINX 将响应错误。由于流量往往是突发的,因此在流量突发期间返回错误以响应客户端请求并不是最好的情况。

将 limit_req 指令的burst参数设置等待以指定速率处理的最大请求数,超出zone限制的请求会被放入数目为5的队列中
请添加图片描述
虽然超过了所设置的只允许一秒一个请求,但可以被放入队列中,一秒处理一个,最后用了9秒处理完客户端的请求
请添加图片描述
nodelay表示不限制单个请求间的时间;
burst=5 nodelay:表示这5个请求立马处理,不能延迟,相当于特事特办。不过,即使这5个突发请求立马处理结束,后续来了请求也不会立马处理
请添加图片描述
可以看到依然有失败的请求
请添加图片描述

3.限制带宽

由于图片的大小为444k,因为限制的速度为50k,所以一张图片请求大概需要8s,那么5次请求大概需要40秒左右
请添加图片描述
压力测试
请添加图片描述
设定并发数为5,则可以8s处理完成
请添加图片描述
查看日志
请添加图片描述

二、nginx配置管理

1.自动索引

客户端如果直接访问server1的nginx默认发布目录里的download目录,会报错
请添加图片描述
路径完整才可以成功访问到图片
请添加图片描述
编辑主配置文件
请添加图片描述
autoindex on:为download目录加入自动索引功能
请添加图片描述
请添加图片描述
实现了download目录下的文件的自动索引
请添加图片描述

2.缓存配置

Nginx expire缓存配置: 缓存可以降低网站带宽,加速用户访问,缓存365天;
html表示默认发布目录
请添加图片描述
请添加图片描述
返回码200,表示成功,;
expires显示到明年9.5到期
请添加图片描述

3.日志轮询

nginx的日志存放目录如下
请添加图片描述
写一个shell脚本,脚本内容表示: 进入到nginx的日志目录,修改access.log名字为access_$(date +%F -d -1day).log;
kill -USR1 :重新生成新的日志文件
请添加图片描述
可以看到date +%F -d -1day代表前一天的意思;
执行脚本,查看效果
请添加图片描述
可以看到产生了新日志
请添加图片描述

4.禁用不必要的日志记录

这样可以节省磁盘IO的消耗,设定访问图片等文件时,不记录日志,节省磁盘空间;
启用nginx status配置,设定只允许本机(server1)访问
请添加图片描述
请添加图片描述
可以看到客户端无法访问server1的status(监控)
请添加图片描述
Active connections – 活跃的连接数量;
server accepts handled requests — 总共处理了的连接数 , 成功创建的握手数, 总共处理的请求数;
reading — 读取客户端的连接数;
writing — 响应数据到客户端的数量;
waiting — 开启 keep-alive 的情况下,这个值等于 active – (reading+writing), 意思就是 Nginx 已经处理完正在等候下一次请求指令的驻留连接
请添加图片描述

三、nginx访问控制

1.nginx重定向

防止域名恶意解析到服务器IP,设定当访问localhost时,显示500错误
请添加图片描述
设定成功后,客户端测试访问失败
请添加图片描述
设定客户端访问server1时,会重定向到www.westos.org
请添加图片描述
HTTP状态的码301: 301 代表永久性转移(Permanently Moved)
请添加图片描述
网页测试
请添加图片描述
重定向到www.westos.org(同时实现负载均衡)
请添加图片描述
请添加图片描述
设定中文乱码:
将nginx的默认发布页面写入中文内容
请添加图片描述
打开默认的字符编码koi8-r
请添加图片描述
请添加图片描述
网页测试时,记得清缓存
请添加图片描述
此时当访问server1(80端口)时,会看到乱码内容
请添加图片描述
请添加图片描述
当设定字符编码为 charset utf-8:表示当前文档的字符集是采用utf-8的字符,也就是我们常说英文字符集
在这里插入图片描述
清除缓存后再次访问server1
![请添加图片描述](https://img-blog.csdnimg.cn/4dfe54288fe043a3a6de9c9f00e9f560.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5aWL5paX55qE5bCP54y0,size_20,color_请添加图片描述
乱码问题得以解决
请添加图片描述

2.80端口重定向到443端口

修改配置文件,设定需要被加密的网址;
设定证书和密钥都为cert.pem,
请添加图片描述
加入重定向
请添加图片描述
注释掉负载均衡
在这里插入图片描述
在以下目录生成指定证书和密钥
请添加图片描述
请添加图片描述
将证书和key文件移动到nginx的配置文件目录
请添加图片描述
刷新服务
请添加图片描述
查看443端口已经打开
请添加图片描述
访问测试:发现成功对地址进行了加密
请添加图片描述
网页测试
请添加图片描述
请添加图片描述
出现乱码的原因是没有在全局设定中加入: charset utf-8(设定字符编码)
请添加图片描述
加入之后
请添加图片描述
在网页访问前清除缓存
请添加图片描述
可以看到没有乱码的出现
请添加图片描述

3.www.westos.org/bbs 重定向到bbs.westos.org

设定基于域名的虚拟主机部分:
server_name bbs.westos.org; 域名
root /bbs; 站点根目录,即网站程序放的目录
location / { 默认访问的location标签段
index index.html; 首页
}

请添加图片描述
在 / 下建立bbs目录;
给index.html文件写入内容
请添加图片描述
真机加入域名解析
请添加图片描述
测试访问成功,当客户端访问该域名时,会访问到/bbs目录下的index.html文件的内容(此时可以打开负载均衡模块)
请添加图片描述
加入重定向:当客户端访问www.westos.org/bbs时,重定向到bbs.westos.org
请添加图片描述
刷新服务后,访问测试,可以看到重定向成功
请添加图片描述
网页测试
请添加图片描述请添加图片描述
但是如果相要直接访问index.html文件的内容就会出错
请添加图片描述
继续编辑配置文件,再加入一条重定向
请添加图片描述
测试重定向成功
请添加图片描述

4.bbs.westos.org重定向到www.westos.org/bbs

设定网页根目录位于 /bbs;
站点根目录位于 html下的bbs;
加入重定向策略
请添加图片描述
测试发现重定向成功
请添加图片描述
第二种方式:将/bbs目录的内容,复制到nginx的html目录
请添加图片描述
注释掉以下内容
请添加图片描述
加入以下设定
请添加图片描述
测试发现重定向成功
请添加图片描述
网页测试
请添加图片描述
请添加图片描述

5.nginx防盗链

在server2的nginx默认发布目录创建一个盗链文件
请添加图片描述
请添加图片描述
请添加图片描述
测试访问,显示盗链成功
请添加图片描述
在server1设置防盗链;
原始站点访问的是www.westos.org时,不做禁止
请添加图片描述
此时客户端只能通过访问www.westos.org来获取指定图片
请添加图片描述
server2盗链失败
请添加图片描述
加入重定向,设定当盗链时会返回一张盗链图片
请添加图片描述
server1获取盗链图片请添加图片描述
此时server2访问原本的盗链文件时会显示盗链
请添加图片描述