nginx端口做限速限流

需求背景:需要在nginx上新增端口用于DNS服务器的健康检查

DNS做健康检查原理:DNS除了做域名解析,还可以用于基于健康检查的流量分发:DNS服务器可以定期检查服务器的健康状态,并根据服务器的可用性和负载情况进行流量分发。如果某个服务器不可用或者负载过高,DNS服务器可以暂时将其从解析结果中移除,避免将请求发送到故障或负载的服务器上。在基于健康检查的分发中,一个或多个监控器会定期向服务器发送健康检查求情。这些检查请求可以是简单的PING请求、HTTP请求、TCP连接请求或其他协议的请求。监控器根据服务的响应时间、状态码、连接可用性等指标来判断服务器的健康状态。

nginx的具体配置如下:

http {

    ...

    map $http_x_forword_for $real_ip {
        default $binary_remote_addr;
        "~^(.+)$" $1;
    }

    limit_req_zone $real_ip_zone=req_limit_per_ip:10m rate=1r/m;
    limit_conn_zone $real_ip zone=c:10m;

    server {
        linten 19902;
        server_name localhost;
        server_tokens off;
        keepalive_timeout 0;
        send_timeout 5s;
        client_body_timeout 1s;
        client_max_body_size 1k;
        limit_req_zone=req_limit_per_ip burst=1;
        limit_conn limit_conn_zone 1;
        if($time_iso8601 ~ '(\d{4}-\d{2}-\d{2})'){
            set $ymd $1;
        }
        access_log logs/access-19902-$ymd.log main;
        error_log logs/error-19902.log;
        location /{
            return 200 "";
        }
    }
    ...


}

1.限制连接数为1,为什么压测没有拦截住?

        当请求处理时间很短并且没有阻塞操作时,nginx会尽快的完成请求并释放连接,然后处理下一个请求。这样即使“limit_conn”设置为1,由于连接处理时间很短,它无法在同一时间内收到多个请求,因此不会触发限制。

        但是,如果添加睡眠时间,请求的时间变长,nginx会保持处于繁忙状态,直到请求完成。这样当第二个请求到达时,nginx会检查连接的繁忙状态,并根据“limit_conn”指令的设置将其放入等待队列,知道前一个请求完成。这样就完成了对并发数的限制。

2.限制请求速率,burst参数的默认值是多少?配置为0效果是什么?

        默认值是0,不允许显示配置。表示不允许任何短期请求超过限制。例如我配置的是一分钟一个请求,短期内(一分钟)只允许一个请求;即使配置的是一分钟五个请求,短期内并发情况下也只允许一个请求。

3.如果x_forwarded_for没有值,且没有默认值,限速会怎样?

        没有源ip,限速也没有作用了;且无报错信息。

  • 5
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值