字體:  

nginx limit ip 如何做白名單whitelist配置

becky98 發表於: 2016-12-01 17:05 來源: ADJ網路控股集團


在這篇文章裡 < nginx 如何限制同一ip connection 連接數 >
中會對所有的IP進行限制。在某些情況下,我們不希望對某些IP進行限制,如自己的反向代服務器IP,公司IP等等。
這就需要白名單,將特定的IP加入到白名單中。下面來看看nginx白名單實現方法,需要結合geo和map指令來實現。

QUOTE:



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;
limit_req_zone  $limit zone=peripreq:10m rate=1r/s;
=============================================================

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不做限制。

測試方法:

QUOTE:


# ab -c 100 -n 500 http://www.abc.com.tw/


參考資料:http://www.ttlsa.com/nginx/nginx-speed-white-list-configuration/38/
逢甲住宿推薦逢甲住宿台中旅店逢甲日租台中住宿台中逢甲民宿台中民宿台中一中住宿台中便宜住宿台中青年旅館