zoukankan      html  css  js  c++  java
  • nginx map模块使用和配置

    主机 IP 备注
    master1 10.0.0.63
    master2 10.0.0.64

    1. NGINX MAP模块与NGINX GEO模块

    在通常情况下,使用nginx基于 ip 限制访问请求频率等限制内容,我们会需要对特定ip进行限制排除操作,因此本文引入了基于nginx geo 与 nginx map 进行此类情景相关配置
    这两个模块默认已经安装.

    Nginx geo 格式说明

    Syntax ( 语法格式 ): geo [$address] $variable { ... }
    Default ( 默认 ): -
    Content ( 配置段位 ): http
    

    Nginx map 格式说明

    Syntax ( 语法格式 ): map String $variable { ... }
    Default ( 默认 ):-
    Content ( 配置段位 ): http
    

    2. NGINX MAP配置实例

    10.0.0.63 配置nginx map

    #----------------------------------------------------------------------------#
    worker_processes  1;
    events {
        worker_connections  1024;
    }
    http {
        include       mime.types;
        default_type  application/octet-stream;
        sendfile        on;
    worker_processes  1;
    events {
        worker_connections  1024;
    }
    http {
        include       mime.types;
        default_type  application/octet-stream;
        sendfile        on;
        keepalive_timeout  65;
        log_format  main  '$remote_user [$time_local] "$request" '
                          '$status $body_bytes_sent "$http_referer" '
                          '"$http_user_agent" "$request_time" "$remote_addr" "$binary_remote_addr"';
        geo $whiteiplist {
            default $binary_remote_addr;   # 设置默认值
            127.0.0.1 0;     # 0 是不受限制的网段
            10.0.0.0/24 1;   # 1 是受限制的网段
            }
        map $whiteiplist $limit {
            1 $binary_remote_addr;
            0 "";
            }
            limit_req_zone $limit zone=leilei:1m rate=5r/m;
            limit_req_log_level warn;
        server {
            listen       80;
            server_name  localhost;
            limit_req  zone=leilei burst=1;
            limit_req_log_level warn;
            access_log /var/log/nginx/access.log main;
            location / {
                root   html;
                index  index.html index.htm;
            }
            error_page   500 502 503 504  /50x.html;
            location = /50x.html {
                root   html;
            }
        }
    }
    #----------------------------------------------------------------------------#
    
    理解:
    limit_req_zone $limit zone=leilei:1m rate=5r/m;
    limit_req_log_level warn;
    
    zone=leilei:1m  :定义的缓存空间
    rate=5r/m   : 每分钟可以请求的次数 [还可以设置 5r/s 为每秒请求5次]
    burst=1     : 在请求值超出后,不会马上返回错误,而是等待时间过了之后再返回,如果这个时间范围超出后,才会返回503错误
                  这个缓冲区,还可以在后添加nodelay; 代表返回503
    			 爆发流量时会写入进缓冲区.如果缓冲区被写满就会返回503, 也就是允许的队列个数的意思.
    $whiteiplist : 定义哪些会被限制. 0 为不限制 1为限制,1的点至就是 map下的limit_req_zone 控制速度
    
    一分钟内的请求会被缓存到nginx中,超出1分钟后未被请求的自动放开, 如:  漏斗一样,一分钟请求 60个,在1分零1秒的时候,它在处理完第一个请求后会自动释放第一次请求,此时请求数会多出一个被允许的请求空位,用于响应下一个用户请求.
    

    测试

    [root@master ~]# curl   -I 10.0.0.64
    HTTP/1.1 200 OK
    Server: nginx/1.16.1
    Date: Mon, 27 Apr 2020 06:01:02 GMT
    Content-Type: text/html
    Content-Length: 67703
    Last-Modified: Mon, 27 Apr 2020 02:11:23 GMT
    Connection: keep-alive
    ETag: "5ea63f4b-10877"
    Accept-Ranges: bytes
    
    [root@master ~]# curl   -I 10.0.0.64
    HTTP/1.1 503 Service Temporarily Unavailable     ## 超出限制 自动503 
    Server: nginx/1.16.1
    Date: Mon, 27 Apr 2020 06:01:03 GMT
    Content-Type: text/html
    Content-Length: 3693
    Connection: keep-alive
    ETag: "5d958342-e6d"
    


    对爬虫进行限流:

    location / {
    
    limit_req zone=leilei burst=2 nodelay;
    if ($http_user_agent ~* "spider|Googlebot") {
    set $anti_spider $http_user_agent;
    }
    
    }
    
  • 相关阅读:
    JAVA 遍历UFT-8所有中文
    用友U8 | 【固定资产】固定资产常见问题
    用友U8 | 【出纳管理】当前凭证不是出纳管理凭证,不能修改
    用友U8 | 【出纳管理】选中的日记账包含了已制单但没有回写凭证号的日记账,无法制单!
    用友U8 | 【生产订单】工作日历未设定或超出工作日历范围
    用友U8 | 【出纳管理】当前选择的日记账已经制单,上次制单包含其他账户的日记账,请在日记账查询中修改
    用友U8 | 【U8年结】开账结转如何操作?
    用友U8 | 【出纳管理】收支操作生单提示:集合中的143272已经加锁了,不能对集合中的数据进行加锁
    用友U8 | 【出纳管理】银行记账提示:未设置对象变量或with block 变量(91)
    MySQL经典45题(二)
  • 原文地址:https://www.cnblogs.com/superlinux/p/12786449.html
Copyright © 2011-2022 走看看