Nginx如何防止流量攻击?我们都知道服务器资源是有限的,但是客户端的请求是无限的(不排除恶意攻击)。为了保证大部分请求都能正常响应,客户端的一些请求不得不放弃,所以我们会使用Nginx限流操作,这个操作可以在很大程度上缓解服务器的压力,让其他正常的请求可以正常回复。如何使用Nginx实现基本的限流,比如限制单个IP每秒访问100次。通过Nginx的限流模块,我们可以设置一旦并发连接数超过我们设置的,就会返回503错误给客户端。这可以非常有效地防止CC攻击。结合iptables防火墙,基本可以忽略CC攻击。如何使用conf配置#http域统一配置#限制请求limit_req_zone$binary_remote_addr$urizone=api_read:20mrate=100r/s;#通过ip配置连接zonelimit_conn_zone$binary_remote_addrzone=perip_conn:10m;#通过服务器配置连接zonelimit_conn_zone$server_namezone=perserver_conn:100m;server{listen80;server_nametest.domain.com;indexlogin.do;location/{#通过突发请求流量限制排队默认为0limit_reqzone=api_readburst=5;#连接限制,每个IP并发请求为2limit_connperip_conn2;#服务限制的连接数(即限制服务器的并发连接数)limit_connperserver_conn1000;#连接限速limit_rate100k;proxy_passhttp://test;}}upstreamreport{fair;server172.16.0.10:8882weight=1max_fails=2fail_timeout=30s;server172.16.0.10:8881weight=1max_fails=2fail_timeout=30s;}配置503错误默认情况,超出限度,将报503错误UnavailableTheServiceTemparily3toserverisor5由于维护停机或容量问题,请您稍后再试。抱歉给您带来不便。请将此消息报告并包含以下信息给我们。非常感谢!这种显示没有毛病,但不够友好,这里我们自定义了503错误。error_page500502503504/50x.html;location=/50x.html{roothtml;#custom50Xerror}配置说明limit_conn_zone是为每个IP定义一个存储session状态的容器。本例中定义了一个100m的容器,按照32bytes/session,可以处理3200000个session。限制速率300k;每个连接的速率限制为300k。请注意,这是连接速率限制,而不是IP。如果一个IP允许两个并发连接,那么这个IP就是limit_rate×2。突发=5;这相当于在检查站要求旁边放置5个座位??。如果当时有一个请求因为超速而被拦下,让他坐到空座位上,排队等候,如果检查站是空的,他就可以通过。如果连座都坐满了,那不好意思,直接返回请求,客户端得到响应服务器忙。因此,burst与request_rate无关。如果设置为10000,可以排队10000个请求,但是checkpoint还是1秒释放5个请求(龟速)。而且不能一直排队,所以nginx也设置了超时时间。如果队列超过一定时间,则直接返回,返回服务器忙的响应。Nginx的上述配置需要配置以下模块:ngx_http_limit_conn_module(static)ngx_http_limit_req_module(static)执行命令nginx-V查看是否安装。
