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;
}

}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM