有时出于某些安全,权限等原因,我们需要对客户端访问进行控制,本文将记录如何 限制访问, 设置连接最大请求数, 或最大的下载速度等。
location / {
allow 192.168.1.1/24;
allow 127.0.0.1;
deny 192.168.1.2;
deny all;
}
server {
...
auth_basic "closed website";
auth_basic_user_file conf/htpasswd;
}
server {
...
auth_basic "closed website";
auth_basic_user_file conf/htpasswd;
location /public/ {
auth_basic off;
}
}
location / {
satisfy any;
allow 192.168.1.0/24;
deny all;
auth_basic "closed site";
auth_basic_user_file conf/htpasswd;
}
limit_conn_zone $binary_remote_address zone=addr:10m;
location /download/ {
limit_conn addr 1;
}
http {
limit_conn_zone $server_name zone=servers:10m; #用server作为key
server {
...
limit_conn servers 1000;
}
}
limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s; # 定义每秒请求数,或r/m每分钟请求数
location /search/ {
limit_req zone=one burst=5; # brust设置最大等待的请求,超过该值的请求将被返回503
}
limit_req zone=one burst=5 nodelay;
location /download/ {
limit_rate 50k; # 每个连接只允许最大50kb/s的速度进行下载
}
location /download/ {
limit_conn addr 1;
limit_rate 50k;
}
我们还可以在后端服务器的响应头中设置X-Accel-Limit-Rate来作限制。
limit_rate_after 500k;
limit_rate 20k;
http {
limit_conn_zone $binary_remote_address zone=addr:10m
server {
root /www/data;
limit_conn addr 5; # 全局允许一个客户端5个连接
location / {
}
location /download/ {
limit_conn addr 1; # /download时, 只允许一个客户端1个连接
limit_rate 50k;
}
}
}