字體:  

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;                        #記得將 $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不做限制。

測試方法:

QUOTE:


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


參考資料:http://www.ttlsa.com/nginx/nginx-speed-white-list-configuration/38/