• nginx令牌限制并发


    http{

    limit_req_zone $binary_remote_addr zone=req_one:10m rate=100r/s;
    server
    {

    listen 8080;
    server_name localhost;
    location /server1/ {
    limit_req zone=req_one burst=10;
    }

    }
    }

    解释:

    rate=100r/s  意思是每个地址每秒只能请求100次。

    burst=10     表示 一共有10块令牌,并且每秒钟只新增1块令牌。

    可以参考以下例子:

    nginx利用limit模块设置IP并发防CC攻击
    在nginx.conf 中的http字段下面加入一如下一行
    limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s; ##平均 1r/s 每秒1个请求

    再在server下配置的主机定义文档中加入如下一行(全局就加在server下面)
    limit_req zone=one burst=8;队列模式
    limit_req zone=one burst=8 nodelay; ###不用队列 默认的突发(burst是0)

    如果只想限制php的请求,加在location下

    location ~ .php$ {
    try_files $uri =404;
    fastcgi_split_path_info ^(.+.php)(/.+)$;
    fastcgi_pass unix:/var/run/php-fpm.sock;
    fastcgi_index index.php;
    include fastcgi_params;
    limit_req zone=one burst=8 nodelay;

    重加载nginx即可 nginx -s reload

    参考文档1:http://www.howtoforge.com/rate-limiting-with-nginx
    参考文档2:http://wiki.nginx.org/NginxHttpLimitReqModule

    比如nginx.conf的http段配置如下

    1. limit_req_zone $binary_remote_addr zone=req:20m rate=100r/s;
    2. limit_req zone=req burst=150;
    复制代码

    “limit_req_zone $binary_remote_addr zone=req:20m rate=100r/s;”
    相当于在nginx创建了一个检查站,名字叫req,凡是跟req相关的请求,并限定检查速率是100r/s。
    所以当使用“limit_req zone=req
    burst=150;”指定某些请求需要经过req的时候,请求的速率就被限制为100r/s。日志验证了这点。

    然后就是burst=150了。这相当于在检查站req旁边放150个座位。如果某个请求当时超过速度限制被拦了,请他在空座位上坐着,等排队,如果检查站空了,就可以通过。如果连座位都坐满了,那就抱歉了,请求直接退回,客户端得到一个服务器忙的响应。所以说burst跟request_rate一点关系都没有,设成10000,就是1万个请求可以等着排队,而检查站还是1秒钟放行100个请求(龟速)。而且也不能一直排队,所以nginx还设了超时,排队超过一定时间,也是直接退回,返回服务器忙的响应。

  • 相关阅读:
    消息队列 ActiveMQ
    Redis
    SQL 怎么用EXISTS替代IN
    SQL优化
    为什么要重写hashCode()和equals()方法
    Redis的介绍和面试可能问到的问题
    建立私有CA和颁发证书
    修复grub2
    Centos 7 进入救援模式
    Centos 服务的常用命令
  • 原文地址:https://www.cnblogs.com/gradven/p/4962982.html
Copyright © 2020-2023  润新知