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