1. 程式人生 > >nginxif多條件結合判斷(實現限速)

nginxif多條件結合判斷(實現限速)

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多條件結合判斷(實現限速)