nginx IF判断表达式

一、if语句中的判断条件(nginx)

1、正则表达式匹配:

==:等值比较;
~:与指定正则表达式模式匹配时返回“真”,判断匹配与否时区分字符大小写;
~*:与指定正则表达式模式匹配时返回“真”,判断匹配与否时不区分字符大小写;
!~:与指定正则表达式模式不匹配时返回“真”,判断匹配与否时区分字符大小写;
!~*:与指定正则表达式模式不匹配时返回“真”,判断匹配与否时不区分字符大小写;

2、文件及目录匹配判断:

-f, !-f:判断指定的路径是否为存在且为文件;
-d, !-d:判断指定的路径是否为存在且为目录;
-e, !-e:判断指定的路径是否存在,文件或目录均可;
-x, !-x:判断指定路径的文件是否存在且可执行;

3、nginx虽然有if,但是却不支持else,如果想要构造else语法,可以使用下面的这个“小诀窍”:

server {
    server_name *.gbk.pw;
    listen 80;
    
    location / {
        set $is_matched 0;
        if ($host = a.gbk.pw) {
            proxy_pass https://127.0.0.1:8001/;
            set $is_matched 1;
        }
        
        if ($host = b.gbk.pw) {
            proxy_pass https://127.0.0.1:8002/;
            set $is_matched 1;
        }
        # 没有匹配到,跳转到默认页面
        if ($is_matched = 0) {
            proxy_pass https://127.0.0.1;
        }
    }
}

发表评论

电子邮件地址不会被公开。 必填项已用*标注

Captcha Code