在這篇文章裡 <
nginx 如何限制同一ip connection 連接數 >
中會對所有的IP進行限制。在某些情況下,我們不希望對某些IP進行限制,如自己的反向代服務器IP,公司IP等等。
這就需要白名單,將特定的IP加入到白名單中。下面來看看nginx白名單實現方法,需要結合geo和map指令來實現。
引用:
http {
geo $whiteiplist {
default 1;
127.0.0.1 0;
192.168.1.0/24 0;
}
map $whiteiplist $limit {
1 $binary_remote_addr;
0 "";
}
limit_conn_zone $limit zone=perip:10m; #記得將 $binary_remote_addr 改成 $limit
limit_req_zone $limit zone=peripreq:10m rate=1r/s; #記得將 $binary_remote_addr 改成 $limit
=============================================================
server {
listen 80;
server_name adj.idv.tw www.adj.idv.tw;
...
...
# Limit IP Connection
limit_conn perip 20;
limit_req zone=peripreq burst=200 nodelay;
}
技術要點:
1. geo指令定義一個白名單$whiteiplist, 默認值為1, 所有都受限制。如果客戶端IP與白名單列出的IP相匹配,則$whiteiplist值為0也就是不受限制。
2. map指令是將$whiteiplist值為1的,也就是受限制的IP,映射為客戶端IP。將$whiteiplist值為0的,也就是白名單IP,映射為空的字符串。
3. limit_conn_zone和limit_req_zone指令對於鍵為空值的將會被忽略,從而實現對於列出來的IP不做限制。
測試方法:
引用:
# ab -c 100 -n 500 http://www.abc.com.tw/
參考資料:
http://www.ttlsa.com/nginx/nginx-speed-white-list-configuration/38/