https://docs.nginx.com/nginx/admin-guide/security-controls/controlling-access-proxied-http/docs.nginx.com
实验记录:
先准备各种大小的文件
(用 dd if=/dev/zero of=100M.file bs=1M count=100 创建几个即可)
nginx 静态代理
server {
listen 80;
server_name x.x.x.x;
root /var/www;
}
限制连接数 Limiting the Number of Connections
先添加一个zone(10m的意义可以不管)
limit_conn_zone $binary_remote_addr zone=addr:10m;
http {
...
...
limit_conn_zone $binary_remote_addr zone=addr:10m;
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
}
限制1个试试
server {
listen 80;
server_name 120.78.201.151;
root /var/www;
limit_conn addr 1;
}
生效
限制带宽 Limiting the Bandwidth
(针对每个连接而不是某ip)
server {
listen 80;
server_name 120.78.201.151;
root /var/www;
limit_conn addr 3;
limit_rate 10k;
}
那么总的带宽限制就是两者相乘
更复杂的配置应该要结合路由,略过
以下可以忽略
限制频繁连接 Limiting the Request Rate
Rate limiting can be used to prevent DDoS attacks
(可以对付 ddos 攻击,但个人感觉大量的ddos没法对付)
http {
...
...
limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;
}
server {
...
limit_req zone=one;
}
这个用浏览器不方便测试(一秒一次),用python head测试下
import requests
import time
for x in range(0,10):
res = requests.head('http://x.x.x.x/50M.file')
print(res)
time.sleep(0.1)
可以发现频繁的请求会导致 503