為了防止服務器被惡意采集或ddos攻擊給搞死, 所以給限個速。
這里主要使用Nginx的ngx_http_limit_req_module和ngx_http_limit_conn_module來控制訪問量.
這兩個模塊在Nginx中已內置, 在nginx.conf文件中加入相應的配置即可使用。
如下所示(附帶白名單功能),對所有的PHP頁面的請求進行限速:
http {
#geot和map兩段用于處理限速白名單,map段映射名單到$limit,處于geo內的IP將被映射為空值,否則為其IP地址。
#limit_conn_zone和limit_req_zone指令對于鍵為空值的將會被忽略,從而實現對于列出來的IP不做限制
geo $whiteiplist {
default 1;
127.0.0.1 0;
121.199.16.249 0;
}
map $whiteiplist $limit {
1 $binary_remote_addr;
0 "";
}
#limit_conn_zone定義每個IP的并發連接數量
#設置一個緩存區保存不同key的狀態,大小10m。使用$limit來作為key,以此限制每個源IP的鏈接數
limit_conn_zone $limit zone=perip:10m;
#limit_req_zone定義每個IP的每秒請求數量
#設置一個緩存區reqps保存不同key的狀態,大小10m。這里的狀態是指當前的過量請求數。
#$limit為空值則不限速,否則對應的IP進行限制每秒5個連接請求。
limit_req_zone $limit zone=reqps:10m rate=5r/s;
server {
listen 80;
server_name www.domain.com;
#只對PHP頁面的請求進行限速
location ~ [^/]\.php(/|$)
{
#對應limit_conn_zone塊
#限制每IP的PHP頁面請求并發數量為5個
limit_conn perip 5;
#對應limit_req_zone塊
#限制每IP的每秒的PHP頁面請求次數為上面定義的rate的值:每秒5個請求,不延遲
limit_req zone=reqps nodelay;
}
}
}