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


參考文章:

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:判斷指定路徑的文件是否存在且可執行;


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM