• nginx 限制并发访问及请求频率


    0.

    1.参考

    【工作】Nginx限制IP并发连接数和请求数的研究

    Module ngx_http_limit_conn_module

    Module ngx_http_limit_req_module

    漏桶算法和 NGINX 的 limit_req 模块

    漏桶这个名字,其实就非常形象的描述了算法本身的原理。大家都知道,一个身上打了 n 个眼儿的桶,无论你倒进桶里的水多还是少,漏出来的水的流速也会保持稳定,这就是此算法的本质。再以 NGINX + PHP-FPM 为例,我们在 NGINX 配置里定义一个最大处理请求的速度,如果 PHP-FPM 的稳定处理速度峰值是 1000 RPS,那就在 NGINX 里定义处理请求速度最大为 1000 RPS。当 RPS 已经大于这个值的时候,多出来的请求就被 NGINX 这个桶暂时储存起来,排着队等待处理。在 NGINX 的精心照料下,PHP-FPM 会相对稳定的处理来自 NGINX 的请求,而不会出现突然暴增的请求让 PHP-FPM 处理不过来,甚至挂掉。

    然而桶也有大小,NGINX 也一样,假如请求太多太多,桶都装不下了,那么桶将会把多出来的请求直接漏掉,返回 503 错误。

    php-fpm 与 Nginx优化总结

    最大请求数max_requests

    最长执行时间request_terminate_timeout

    2.vi /etc/nginx/nginx.conf

    在 http{} 添加:

        ## 2017-12-18 【工作】Nginx限制IP并发连接数和请求数的研究 http://www.jiagoumi.com/work/718.html
        #调整为1,nginx -t 检查,再reload,查看 error.log
        #默认为503 Service Unavailable,由于临时的服务器维护或者过载,
        #可以429 Too Many Requests 用户在给定的时间内发送了太多的请求
        
        # [error] limiting connections by zone "conn_ip"
        limit_conn_zone $binary_remote_addr zone=conn_ip:10m;
        limit_conn conn_ip 10;  #如果这里设置为限制1个ip只能1个连接,log 显示 req_freq_ip 相关控制信息
        
        # [error] limiting connections by zone "conn_server"
        limit_conn_zone $server_name zone=conn_server:10m;
        limit_conn conn_server 1000;
        
        
        limit_req_zone  $binary_remote_addr zone=req_freq_ip:10m rate=3r/s;
        #这样相当于容量为0,都会被503,没有意义
        #limit_req zone=req_freq_ip;  #By default, the maximum burst size is equal to zero
        
        #超过每秒3个请求,放入最多容纳10个的缓冲区,或者理解为10个令牌?
        #超过3.x,则log显示 [warn] delaying; 超过10.x,则log显示 [error] limiting, 会被503
        limit_req zone=req_freq_ip burst=10;
        
        #后面加 nodelay 则未超过10.x的拿到令牌的请求不会被延迟
        #limit_req zone=req_freq_ip burst=10 nodelay;  
        
        limit_req_status 429;
        
        
        limit_conn_log_level error;  #info | notice | warn | error 不支持 debug

    3.这里打开一个网页,实际上建立了多个连接,其中也包括连接复用。

  • 相关阅读:
    C++矢量图形库系列(转)
    ArcGIS Server 地图发布请求分析
    Git在提交代码时出现的fatal: Authentication failed的问题
    创建WPF项目
    Linux查看日志常用命令(转载)
    CentOS6 + MapServer7.4编译
    升级GCC
    QT+OpenGL(03)--libpng库的编译
    QT+OpenGL(02)-- zlib库的编译
    QT+OpenGL(01)--实现三角形渲染
  • 原文地址:https://www.cnblogs.com/my8100/p/8057804.html
Copyright © 2020-2023  润新知