一、速率限制請求
1、第一種情況
nginx.conf配置如下:
測試結果如下:
2、第二種情況
nginx.conf配置如下:
運作結果如下:
3、第三種情況
nginx.conf配置如下:
運作結果如下:
二、ip通路子產品限制
1、allow、deny限制
2、geo做簡單的限制
2、基于map指令和geo指令的限速白名單配置
#白名單判斷用戶端的ip位址是否在白名單清單當中,如果傳回為0,則在白名單清單當中,否則傳回為1
geo $whiteIpList{
default 1;
139.159.141.107 0;
47.94.18.0/24 0;
#include '/conf/whiteIp.conf';
}
#如果不在白名單之類,就傳回用戶端的二級制IP位址
map $binary_remote_addr $limit{
default "";
1 $binary_remote_addr;
0 "";
}
#如果傳回的是空字元串,速率限制會失效
#隻能是用戶端的ip位址才能使用
limit_req_zone $limit zone=one:10m rate=10r/s;
server {
listen 8001 default_server;
listen [::]:8001 default_server;
server_name 139.159.141.107;
root /var/www/html;
# Load configuration files for the default server block.
include /etc/nginx/default.d/*.conf;
location / {
default_type text/html;
return 200 '$whiteIpList';
}
}
配置說明如下:
技術要點:
1. geo指令定義一個白名單$whiteIpList, 預設值為1, 所有都受限制。 如果用戶端IP與白名單列出的IP相比對,則$whiteIpList值為0也就是不受限制。
2. map指令是将$whiteIpList值為1的,也就是受限制的IP,映射為用戶端IP。将$whiteIpList值為0的,也就是白名單IP,映射為空的字元串。
3. limit_conn_zone和limit_req_zone指令對于鍵為空值的将會被忽略,進而實作對于列出來的IP不做限制。
測試方法:
ab -c 100 -n 300 -k http://127.0.0.1:8001/ip/
運作結果如下:
事例二:
#白名單判斷用戶端的ip位址是否在白名單清單當中,如果傳回為0,
#則在白名單清單當中,否則傳回為1
geo $whiteIpList{
default 1;
127.0.0.1/32 0;
#include '/conf/whiteIp.conf';
}
#如果不在白名單之類,就傳回用戶端的二級制IP位址
map $whiteIpList $limit{
1 $binary_remote_addr;
0 "";
}
#如果傳回的是空字元串,速率限制會失效
#隻能是用戶端的ip位址才能使用
limit_req_zone $limit zone=one:10m rate=10r/s;
server {
listen 8001 default_server;
listen [::]:8001 default_server;
server_name 139.159.141.107;
root /var/www/html;
# Load configuration files for the default server block.
include /etc/nginx/default.d/*.conf;
location /ip {
limit_conn limit 4;
limit_rate 200k;
limit_req zone=one burst=5 nodelay;
}
}
二、内置變量說明(return的用法)
運作結果: