Nginx学习笔记:如何防止流量攻击

作者 : 开心源码 本文共1137个字,预计阅读时间需要3分钟 发布时间: 2022-05-12 共176人阅读

更多深度文章,请关注云计算频道:https://yq.aliyun.com/cloud

使用场景

最近,报告查询系统负载均衡集群相关配置已经完成,两种实现方式分别是基于Ehcache和Redis的session管理策略。

大家都知道服务器资源有限的,但是用户端来的请求是无限的(不排除恶意攻击), 为了保证大部分的请求能够正常响应,不得不放弃少量用户端来的请求,所以我们会采用Nginx的限流操作, 这种操作可以很大程度上缓解服务器的压力, 使其余正常的请求能够得到正常响应。

如何使用Nginx实现基本的限流,比方单个IP限制每秒访问50次。通过Nginx限流板块,我们可以设置一旦并发连接数超过我们的设置,将返回503错误给用户端。这样可以非常有效的防止CC攻击。再配合 iptables防火墙,基本上CC攻击即可以无视了。

如何使用

conf配置

#统一在http域中进行配置#限制请求limit_req_zone $binary_remote_addr $uri zone=api_read:20m rate=50r/s;#按ip配置一个连接 zonelimit_conn_zone $binary_remote_addr zone=perip_conn:10m;#按server配置一个连接 zonelimit_conn_zone $server_name zone=perserver_conn:100m;server {

配置503错误

默认情况,超出限制额度,将会报503错误,提醒:

503 Service Temporarily Unavailable

这样显示没毛病,但是不够友好,这里我们自己设置503错误。

error_page 500 502 503 504 /50x.html;

配置说明

limit_conn_zone

是针对每个IP定义一个存储session状态的容器。这个示例中定义了一个100m的容器,按照32bytes/session,可以解决3200000个session。

limit_rate 300k;

对每个连接限速300k. 注意,这里是对连接限速,而不是对IP限速。假如一个IP允许两个并发连接,那么这个IP就是限速limit_rate×2。

burst=5;

这相当于在检查站req旁边放5个座位。假如某个请求当时超过速度限制被拦了,请他在空座位上坐着,等排队,假如检查站空了,即可以通过。假如连座位都坐满了,那就抱歉了,请求直接退回,用户端得到一个服务器忙的响应。所以说burst跟request_rate一点关系都没有,设成10000,就是1万个请求可以等着排队,而检查站还是1秒钟放行5个请求(龟速)。而且也不能一直排队,所以nginx还设了超时,排队超过肯定时间,也是直接退回,返回服务器忙的响应。

说明
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是摆设,本站源码仅提供给会员学习使用!
7. 如遇到加密压缩包,请使用360解压,如遇到无法解压的请联系管理员
开心源码网 » Nginx学习笔记:如何防止流量攻击

发表回复