Nginx location

系统+安全 Liemer_Lius 151℃

参考

https://www.cnblogs.com/ronghua/p/13043466.html

语法规则: location [=|~|~*|^~] /uri/ {… }
首先匹配 =,其次匹配^~,其次是按文件中正则的先后顺序匹配,当有匹配成功时候,停止匹配并按当前匹配规则处理请求,其他正则无法匹配则最后交由/通配。

Exp1:对比=,^~,~,~*哪个优先级最高

# cat lius.conf
server {
    listen       80;
    server_name  lius.com;
    location ^~ /lius {
        default_type 'text/plain';
        return 200 "^~ /lius\n";
    }
    location ~ /lius {
        default_type 'text/plain';
        return 200 "~ /lius\n";
    }
    location ~* /lius {
        default_type 'text/plain';
        return 200 "~* /lius\n";
    }
    location = /lius {
        default_type 'text/plain';
        return 200 "= /lius\n";
    }
}
# curl lius.com/lius   # hosts劫持lius.com
= /lius

结论:说明=的优先级是最高的【必须是完全匹配】,与在配置文件中的位置无关;

Exp2:对比^~,~,~*哪个优先级最高,同为^~的匹配原则?

server {
    listen       80;
    server_name  lius.com;
    location ^~ /liu {
        default_type 'text/plain';
        return 200 "^~ /liu\n";
    }
    location ~ /liusddd {
        default_type 'text/plain';
        return 200 "~ /liusddd\n";
    }
    location ~* /liusddd {
        default_type 'text/plain';
        return 200 "~* /liusddd\n";
    }
    location ^~ /lius {
        default_type 'text/plain';
        return 200 "^~ /lius\n";
    }
}
# curl lius.com/liusddd
^~ /lius

结论:

1、说明^~的优先级仅次于=,~*,~即使更加匹配,也优先经过^~的匹配;

2、同级的^~匹配原则遵循【更精准地匹配】,liusddd匹配lius,自然匹配liu,但lius更精准地匹配【下面例子排除顺序影响】;

Exp3:同为^~,顺序是否影响?

# cat lius.conf 
server {
    listen       80;
    server_name  lius.com;

    location ^~ /liu {
        default_type 'text/plain';
        return 200 "^~ /liu\n";
    }

    location ^~ /lius {
        default_type 'text/plain';
        return 200 "^~ /lius\n";
    }
}
# curl lius.com/liusddd
^~ /lius
# curl lius.com/liu
^~ /liu
# cat lius.conf # 修改顺序
server {
    listen       80;
    server_name  lius.com;

    location ^~ /lius {
        default_type 'text/plain';
        return 200 "^~ /lius\n";
    }

    location ^~ /liu {
        default_type 'text/plain';
        return 200 "^~ /liu\n";
    }
}
# curl lius.com/liusddd
^~ /lius
# curl lius.com/liu
^~ /liu

结论:同为~^,匹配与顺序无关,只遵循【更精准地匹配】原则;

 

 

 

 

 

 

转载请注明:skelchina.com » Nginx location

喜欢 (2)