微服务-限制连接数之openresty limit_conn

1.简介

  目的是:限制连接数核心目的是防止恶意请求脚本来刷服务器

  官方文档:http://nginx.org/en/docs/http/ngx_http_limit_conn_module.html

  支持http/https,不支持websocket

2.格式

  limit_conn_zone $binary_remote_addr zone=perip_conn:10m;

    设置zone为perip_conn, 在nginx内存里分配10m的空间来存储

      根据实践经验,1MB的空间可以储存16000个IP地址

  limit_conn perip_conn 10;

    每个ip最多允许10个连接

3. 基于ip限制

3.1. 每个ip限制1个连接数

nginx配置:

ab测试:

  1个连接100次测试

  sudo ab -n 100 -c 1 -t 10  http://10.0.22.120:1180/limit

查看日志:

其他都是:

  2023/01/10 17:30:53 [error] 215#215: *29203 limiting connections by zone "perip_conn", client: 10.0.22.112, server: localhost, request: "GET /limit HTTP/1.0", host: "10.0.22.120:1180"

同一个连接1秒同时只能请求一次

3.2. 每个ip限制6个连接但是1个并发客户端(每个请求0.5s

nginx配置:

ab测试:

  1个连接1秒内发起10000次测试

  sudo ab -n 10000 -c 1 -t 10  http://10.0.22.120:1180/limit

查看日志:

可以发现每次请求间隔都是0.5秒,也就是同时只有一个客户端可以请求

3.3. 每个server限制6个连接10个并发客户端(每个请求1s)

nginx配置:

ab测试:

  10个连接10000次测试持续20秒

  sudo ab -n 10000 -c 10 -t 20  http://10.0.22.120:1180/limit

查看日志:

可以发现非常工整,一秒之内最多只能有6个同求同时存在,只有请求结束了才会开始新的请求。如果设置为一次请求0.5秒,那么1秒就会有达到12个左右,因为请求结束以后,其他的请求被允许的。

这是同时存在请求数的概念。

 

 

posted @ 2023-01-12 10:28  若-飞  阅读(422)  评论(0编辑  收藏  举报