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

 更新时间:2017年05月04日 09:23:55   作者:柒  
这篇文章主要给大家分享了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防盗链的3种方法

    Nginx防盗链的3种方法

    Nginx防盗链的3种方法,需要的朋友可以参考下。
    2010-12-12
  • 升级nginx支持HTTP/2服务端推送的方法

    升级nginx支持HTTP/2服务端推送的方法

    这篇文章主要介绍了升级nginx支持HTTP/2服务端推送的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-05-05
  • nginx中配置pathinfo模式示例

    nginx中配置pathinfo模式示例

    这篇文章主要介绍了nginx中配置pathinfo模式示例,本文详细记录了摸索过程和成功的配置案例,需要的朋友可以参考下
    2014-08-08
  • Nginx的超时timeout配置详解

    Nginx的超时timeout配置详解

    本篇文章主要介绍了Nginx的超时timeout配置详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-12-12
  • nginx+tomcat实现Windows系统下的负载均衡搭建教程

    nginx+tomcat实现Windows系统下的负载均衡搭建教程

    下面小编就为大家分享一篇nginx+tomcat实现Windows系统下的负载均衡搭建教程,具有很好的参考价值,希望对大家有所帮助
    2017-12-12
  • 基于Xen的VPS ubuntu+nginx+php安装教程

    基于Xen的VPS ubuntu+nginx+php安装教程

    跟踪vps已经很久了,但是因为需要特殊端口开服务,所以符合条件的多为Xen平台的vps。众多比较之后选择了vpslink在西雅图机房,速度还不错。
    2010-07-07
  • Nginx服务器https配置的方法示例

    Nginx服务器https配置的方法示例

    这篇文章主要介绍了Nginx服务器https配置的方法示例,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-10-10
  • nginx 目录密码保护的设置方法

    nginx 目录密码保护的设置方法

    比如要对 网站目录下的 test 文件夹 进行加密认证
    2010-12-12
  • 探究Nginx中reload流程的原理真相

    探究Nginx中reload流程的原理真相

    这篇文章主要介绍了探究Nginx中reload流程的原理真相,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-12-12
  • Nginx配置多个HTTPS域名的方法

    Nginx配置多个HTTPS域名的方法

    本篇文章主要介绍了Nginx配置多个HTTPS域名的方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-07-07

最新评论