nginxif多條件結合判斷(實現限速)
阿新 • • 發佈:2018-01-26
limit_req use div pos test urn 客戶端 rst spi
參考文章:
https://yq.aliyun.com/articles/44957
需求: 要對某一ip下,使用android客戶端的用戶進行限速
原理 就是用SET變量進行。 AND 就用變量疊加,OR就用0或1切換。 nginx的配置中不支持if條件的邏輯與/邏輯或運算 ,並且不支持if的嵌套語法,我們可以用變量的方式來實現
需要兩個變量:test1,test2
test1 變量是為了 if條件使用,,test2是最後滿足條件後 給 limit配置用
配置需要自己加入到nginx中
http配置中配置: limit_req_zone $test2 zone=anti_spider:1m rate=1r/s; server配置中配置set $test1 ""; if ( $remote_addr ~ "(0.0.0.1)" ) { set $test1 "Y"; } if ($http_user_agent ~* "android") { set $test1 "${test1}Y"; } if ($test1 = "YY"){ set $test2 $http_user_agent; # return 404; } limit_req zone=anti_spider burst=1 nodelay;
其他:
一、if語句中的判斷條件(nginx)介紹
1、正則表達式匹配:
==:等值比較;
~:與指定正則表達式模式匹配時返回“真”,判斷匹配與否時區分字符大小寫;
~*:與指定正則表達式模式匹配時返回“真”,判斷匹配與否時不區分字符大小寫;
!~:與指定正則表達式模式不匹配時返回“真”,判斷匹配與否時區分字符大小寫;
!~*:與指定正則表達式模式不匹配時返回“真”,判斷匹配與否時不區分字符大小寫;
2、文件及目錄匹配判斷:
-f, !-f:判斷指定的路徑是否為存在且為文件;
-d, !-d:判斷指定的路徑是否為存在且為目錄;
-e, !-e:判斷指定的路徑是否存在,文件或目錄均可;
-x, !-x:判斷指定路徑的文件是否存在且可執行;
nginxif多條件結合判斷(實現限速)