使用的軟體是Http attack version 3.6 設定如圖
nginx.config的設定
修改網站預設的設定檔default如下
限制每個ip超過20個連線數,然後顯示503的錯誤畫面 測試壓測的情況查詢大約19xx連線
測試情況大量連線的ip會出現503的頁面,但另一個ip連線仍然是正常的
主要用到的是Nginx中提供的兩個limit模組:
ngx_http_limit_conn_module ngx_http_limit_req_module
一、白名單
首先這兩個模組是支援白名單的,就是可能有某些IP位址,我們是不需要進行限制的,比如可能會是搜尋引擎啦什麼的或者自己的IP,因此需要設置一個白名單,不需要的可跳過本步。具體方法:
在HTTP段中插入如下格式內容,聲明白名單IP
http{ ....... geo $limited{ default 1; #公司 119.123.5.0/24 0; } ......... }
geo指令定義了一個白名單$limited變數,預設值為1,如果用戶端IP在上面的範圍內,$limited的值為0。
然後緊跟在上面內容後使用map指令映射搜尋引擎用戶端的ip為空串,如果不是白名單IP就顯示本身真實的IP,這樣搜尋引擎iIP就不能存到limit模組的記憶體session中,所以不會限制白名單的IP訪問。
map $limited $limit { 1 $binary_remote_addr; 0 ""; }
二、訪問頻率限制
訪問頻率限制使用到的是ngx_http_limit_req_module,需要在兩個地方配置,首先在HTTP段中,聲明好這個模組一些參數,如果有設置白名單,設置如下
http{ ... limit_req_zone $limit zone=one:10m rate=20r/m; ##平均20r/m 每分鐘20個請求 ... }
如果沒有配置白名單,所有來訪IP都會限制,配置如下
http{ ... limit_req_zone $binary_remote_addr zone=one:10m rate=20r/m; ##平均20r/m 每分鐘20個請求 ... }
解釋一下上面的參數,第一個代表的是需要限制的ip群,這個很好理解,第二個zone=one表示這個limit_zone的名字叫做one,後面的使用中可以用這個one來進行指代,後面的15m,代表為這個zone分配10m的記憶體,1m可以保存16000的$binary_remote_addr。最後一個是頻率,如果要按秒來算可以設置20r/s這樣。
最後是配置到Nginx的php的解析段
location ~ \.php$ { ... limit_req zone=one burst=5 nodelay; ... }
指定了使用名字為one的zone,然後緩衝佇列為5,無延遲,如果不設置無延遲,訪問會卡住。
三、訪問連接限制
訪問連接限制使用到的是ngx_http_limit_conn_module,也是需要在兩個地方配置,首先在HTTP段中,聲明好這個模組一些參數,如果有設置白名單,設置如下
http{ ... limit_conn_zone $limit zone=addr:10m; ... }
如果沒有配置白名單,所有來訪IP都會限制,配置如下
view sourceprint?http{ ... limit_conn_zone $binary_remote_addr zone=addr:10m; ... }
參數的意思跟上面的差不多也就不多解釋了。後面的就是在server段中進行設置了,可以具體到某個目錄什麼的了
server { location /download/ { limit_conn addr 5; }
大功告成,打完收工,記得要nginx -s reload一下
原文:http://netsecurity.51cto.com/art/201306/400210.htm