zoukankan      html  css  js  c++  java
  • Nginx限制连接和请求

    一.ngx_http_limit_conn_module
    对同一个ip/server的连接数做限制.
    配置指令:
    limit_conn_zone
    语法: limit_conn_zone $variable zone=name:size;
    默认值: none
    配置段: http

    $veriable:常见取值
    a.$binary_remote_addr 以客户端ip作为key
    b.$server_name 以server作为key

    示例:

    limit_conn_zone $binary_remote_addr zone=addr:10m;

    以客户端的ip地址做key,配置了一个名称为addr的共享内存为10m空间的限制域.如果内存空间被耗尽,则返回503错误.

    使用$binary_remote_addr变量, 可以将每条状态记录的大小减少到64个字节,这样1M的内存可以保存大约1万6千个64字节的记录

    当多个 limit_conn 指令被配置时,所有的连接数限制都会生效

    http, server, location段配置:

    limit_conn addr 4; #同一ip,同一时间,只允许有4个连接
    limit_rate 200k;#每个连接的下载速度


    二.ngx_http_limit_req_module
    对同一个ip的请求数做限制
    配置指令:
    limit_req_zone
    语法: limit_req_zone $variable zone=name:size rate=rate;
    默认值: none
    配置段: http

    示例:

    limit_req_zone $binary_remote_addr zone=limit:10m rate=1r/s;

    说明:
    以客户端ip为key,建立了一个共享内存为10m的limit限制域.每秒可新增1个请求.

    http, server, location段配置:
    limit_req zone=limit burst=5; //漏桶原理,使用limit限制域限制的速率,每秒1个来处理请求,在处理未完成时,允许有5个请求放在缓存区,其余的请求都要等待.所以单个ip限制的最高峰值为5.

    如果不希望这些请求等待,直接返回拒绝结果,加nodelay;则其余请求直接返回默认的503;

    limit_req zone=limit burst=5 nodelay;

    如果不加nodelay:

    单个ip需要把并发在控制在burst限制内

    如果加了nodelay:

    单个ip不但需要把并发控制在burst内,而且不超出rate(速率)限制.

    三.两者的区别
    1.limit_conn是针对连接,即tcp连接,通过三次握手而建立的一个完整状态机制,来建立一个连接。(keep-alive的出现就是为了减少这种握手的次数,是同一连接可以复用.减少开销)
    2.limit_req是针对请求,即http请求.

    打开一个网页,图文并茂的那种,通常浏览器可能同时建立1-4个连接(依据不同浏览器和传输协议和keep-alive等,实际有所不同),然后由这些连接来发出几十个乃至上百个请求.

    浏览器尽管同时能打开多个连接,但limit_conn限制了同时打开的连接个数.如同时只有1个,则其余的都需要等待.
    连接打开后,就会尽快处理请求,比如返回文本或图片;limit_req则限制了同一ip在同一时间内请求的速度.比如每秒1个,超过这个速率限制,都会等待或不处理.

    如果配置了keep-alive,则一个连接可以处理很多个请求,只要这些请求在limit_req的限制下.

    简而言之,如果将web server比作游乐场,limit_conn限制了通道数目,有几条;limit_req限制了每个通道,可以通行速度.

    因为limit_conn限制了连接数,同时还可以限制下载速度,一般用作下载方面的限制.
    limit_req则一般用作cc攻击防护.

  • 相关阅读:
    LINUX学习笔记day2
    android 获取正在运行的服务
    android小部件
    android开发_国外论坛
    取消线程
    AlarmManager的使用
    PendingIntent
    SharedPreferences 的使用
    流量监听
    android 异常-access to constructor not allowed
  • 原文地址:https://www.cnblogs.com/itfenqing/p/6897614.html
Copyright © 2011-2022 走看看