讓Nginx支援if多重判斷方法

saxon_i發表於2018-07-25

示例一:

nginx不支援if else 多重判斷,需要用另一種方法來解決如下例:

 location /api/opertree/ {

        proxy_next_upstream error timeout invalid_header;

                proxy_pass_header server;

        proxy_http_version 1.1;

        proxy_set_header Connection “”;

        set $flag 0;

                if ($request_uri ~* “/api/XXX/onenode”) {

 set $flag “${flag}1”;

                }

                if ($request_uri ~* “(uid=[0-9]*[5-9]&)|((uid=[0-9]*[5-9]$))”) {

 set $flag “${flag}2”;

                }

                if ($request_uri ~* “uid=((XXXX|XXXX)&)|((XXXX3|XXX3)$)”) {

 set $flag “${flag}3”;

                }

 if ($flag ~* “01(2|3)”) 

                {                       

                    proxy_pass http://commendfe/api/XXXX/list?$args;

                    break;

                }                         

                proxy_pass http://opertree;

        }

示例二:

①nginx if判斷&&(並且)寫法

set $allowphp “;

if ($request_method ~ ^(POST)$) {

set $allowphp p;

}

if ( $request_filename !~ .php$) {

set $allowphp “${allowphp}c”;

}

if ( $allowphp = pc) {

set $allowss false;

}

PS:上面程式碼的意思是 post 提交併且是php檔案的把變數$allowss設定成false

②nginx if判斷||(或)寫法

set $allowss true;

if ($http_x_forwarded_for ~ ” ?222.186.34.41$”) {

set $allowss false;

}

if ($http_x_forwarded_for ~ ” ?180.97.106.37$”) {

set $allowss false;

}

PS:ip地址222.186.34.41或180.97.106.37的把變數$allowss設定成false.上面的程式碼我主要用來禁用ip用的,因為我用了cdn所以ip判斷用的$http_x_forwarded_for

③結合上面兩段程式碼,實現禁止ip訪問,禁止用post訪問非php的檔案

set $allowss true;

set $allowphp “;

if ($request_method ~ ^(POST)$) {

set $allowphp p;

}

if ( $request_filename !~ .php$) {

set $allowphp “${allowphp}c”;

}

if ( $allowphp = pc) {

set $allowss false;

}

if ($http_x_forwarded_for ~ ” ?222.186.34.41$”) {

set $allowss false;

}

if ($http_x_forwarded_for ~ ” ?180.97.106.37$”) {

set $allowss false;

}

if ($allowss = false) {

return 403;

}

以上是雲棲社群小編為您精心準備的的內容,在雲棲社群的部落格、問答、公眾號、人物、課程等欄目也有的相關內容,歡迎繼續使用右上角搜尋按鈕進行搜尋文件 , 檔案 , 變數 , 程式碼 配置 nginx if 判斷url、nginx if else 判斷、nginx if 判斷 不等於、nginx if 多重判斷、nginx if 判斷get引數,以便於您獲取更多的相關知識。

參考文獻


相關文章