当前位置: 首页 > 编程笔记 >

Nginx防止流量攻击的配置详解

权胜泫
2023-03-14
本文向大家介绍Nginx防止流量攻击的配置详解,包括了Nginx防止流量攻击的配置详解的使用技巧和注意事项,需要的朋友参考一下

使用场景

最近在工作中遇到一个问题,项目中报告查询系统负载均衡集群相关配置已经完成,两种实现方式分别是基于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配置一个连接 zone
limit_conn_zone $binary_remote_addr zone=perip_conn:10m;
#按server配置一个连接 zone
limit_conn_zone $server_name zone=perserver_conn:100m;
server {
  listen  80;
  server_name report.52itstyle.com;
  index login.jsp;
  location / {
    #请求限流排队通过 burst默认是0
    limit_req zone=api_read burst=5;
    #连接数限制,每个IP并发请求为2
    limit_conn perip_conn 2;
    #服务所限制的连接数(即限制了该server并发连接数量)
    limit_conn perserver_conn 1000;
    #连接限速
    limit_rate 100k;
    proxy_pass  http://report;
  }
}
upstream report {
  fair;
  server 172.16.1.120:8882 weight=1 max_fails=2 fail_timeout=30s;
  server 172.16.1.120:8881 weight=1 max_fails=2 fail_timeout=30s;
}

配置503错误

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

503 Service Temporarily Unavailable
The server is temporarily unable to service your request due to maintenance downtime or capacity problems. Please try again later. Sorry for the inconvenience.
Please report this message and include the following information to us.
Thank you very much!

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

error_page 500 502 503 504 /50x.html;
location = /50x.html {
 root html;#自定义50X错误
}

配置说明

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还设了超时,排队超过一定时间,也是直接退回,返回服务器忙的响应。

以上配置Nginx需要配置以下模块:

ngx_http_limit_conn_module (static)
ngx_http_limit_req_module (static)

执行命令 nginx -V 就可以检查到是否有安装。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对小牛知识库的支持。

 类似资料:
  • 本文向大家介绍配置Nginx服务器防止Flood攻击的方法,包括了配置Nginx服务器防止Flood攻击的方法的使用技巧和注意事项,需要的朋友参考一下  测试 我会简单的告诉你如何配置Nginx的限制请求模块并且它是如何保护你的网站,防止你被攻击与DDOS或是其他基于HTTP的拒绝服务攻击。 这个测试中,我将样本页在保存在Blitz.io(现在是免费服务)命名为about.html,用于测试lim

  • 本文向大家介绍Nginx中防止SQL注入攻击的相关配置介绍,包括了Nginx中防止SQL注入攻击的相关配置介绍的使用技巧和注意事项,需要的朋友参考一下 防止sql注入最好的办法是对于提交后台的所有数据都进行过滤转义。 对于简单的情况,比如包含单引号' , 分号;, <, >, 等字符可通过rewrite直接重订向到404页面来避免。 用rewrite有个前提需要知道,一般用rewrite进行正则匹

  • 本文向大家介绍Nginx防御DDOS攻击的配置方法教程,包括了Nginx防御DDOS攻击的配置方法教程的使用技巧和注意事项,需要的朋友参考一下 前言 Nginx是一款轻量级的Web服务器,由俄罗斯的程序设计师Igor Sysoev所开发,最初供俄国大型的入口网站及搜寻引Rambler使用。 其特点是占有内存少,并发能力强,事实上Nginx的并发能力确实在同类型的网站服务器中表现较好。 防御DDOS

  • 本文向大家介绍如何防止XSS攻击?相关面试题,主要包含被问及如何防止XSS攻击?时的应答技巧和注意事项,需要的朋友参考一下 (1) 将前端输出数据都进行转义 (2) 将输出的字符串中的\反斜杠进行转义 (3) 从url中获取的信息,防止方法是由后端获取,在前端转义后再行输出 (4) 使用cookie的HttpOnly属性,保护好cookie 详细参见:http://blog.csdn.net/fe

  • 我们对代码进行了安全审计,它提到我们的代码容易受到XML外部实体(XXE)攻击。 XML外部实体攻击利用XML功能在处理时动态构建文档。XML实体允许动态包含来自给定资源的数据。外部实体允许XML文档包含来自外部URI的数据。除非配置为其他方式,否则外部实体会强制XML解析器访问URI指定的资源,例如本地计算机或远程系统上的文件。此行为会使应用程序遭受XML外部实体(XXE)攻击,这些攻击可用于执

  • 问题内容: 最近,我们对代码进行了安全审核,问题之一是我们的应用程序受到 Xml eXternal Entity (XXE)攻击。 基本上,该应用程序是一个计算器,可通过Web服务以XML形式接收输入。 这是对我们的应用程序进行此类XXE攻击的示例: 如您所见,我们可以引用指向外部文件()的实体。 关于XML输入本身(该部分)未与JAXB(v2.1)一起编组。Web服务部分基于jaxws- rt(