Nginx通過geo模組設定白名單

麥老師發表於2018-06-25

原配置:

http {
......
limit_conn_zone $binary_remote_addr zone=one:10m;
limit_req_zone $binary_remote_addr zone=fifa:10m rate=5r/s;

……
server {
……
limit_conn one 5;
limit_req zone=fifa burst=100;
……
}}

白名單配置:

http {
......
geo $whiteiplist  {
    default 1;
    127.0.0.1 0;
    10.10.0.0/24 0;
}
map $whiteiplist $limit {
    1 $binary_remote_addr;
    0 "";
}
limit_conn_zone $limit zone=one:10m;
limit_req_zone $limit zone=fifa:10m rate=5r/s;

……
server {
……
limit_conn one 5;
limit_req zone=fifa burst=100;
……
}}

說明:

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


相關文章