Nginx是大家使用最多的高性能的HTTP和反向代理服务器了,为了防止网站被恶意攻击,我们可以对Nginx配置一些访问限制,比如限制每秒连接次数、每秒请求次数、下载速度等等。
首先需要定义限制连接区间:
limit_conn_zone $binary_remote_addr zone=testip:10m;
然后直接使用:
limit_conn testip 8;
上面配置代表单个ip的最大连接数为8。
先需要定义限制区域,再 http 加入以下配置:
limit_req_zone $binary_remote_addr zone=testip:10m rate=15r/s;
其中 testip 为区域名字,后面的 10m 代表记录的缓存最大内存。
rate 代表访问频率限制,binary_remote_addr代表限制相同ip,相同ip每秒限制访问为15次 ,时间单位也可以为是m(分钟)。
然后在需要限制的 server 内加入以下配置来使用:
limit_req zone=testip burst=10 nodelay;
testip为之前取的限制区域名称,可自定义,
burst设置缓存区大小,当超过了访问频率时请求放置在此缓存区,
nodelay代表超过限制并且缓存区也满了就直接响应503,如果不加,请求会继续排队。
http {
limit_req_zone $server_name zone=testip:10m rate=1r/s;
server {
location / {
limit_req zone=testip;
}
}
}
http {
limit_req_zone $binary_remote_addr zone=testip:10m rate=1r/s;
server {
location / {
# 可以放在 http,server,location
limit_req zone=testip;
}
}
}
即限制下载带宽
使用 limit_rate 可以限制下载的速度
server {
listen 80;
server_name xxx.com;
// 例如限制下载速度为500k
limit_rate 500k;
location / {
root html;
index index.html;
}
}
设置超过指定大小后限制
server {
// 下载速度超过500k则限制为10k
limit_rate 10k;
limit_rate_after 500k;
}
限制最大上传大小可以避免别人恶意上传很大的文件而占用资源
在http加入如下配置来限制
client_max_body_size 100m;