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;
}
}
}
限制相同ip每秒只允許一個請求
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;