nginx:location tilde regex vs path

时间:2017-08-17 15:39:40

标签: nginx reverse-proxy nginx-location proxypass

这两个nginx指令有什么区别?

location ^~ /sub-directory

location /sub-directory

在以下代码块中,如果有所不同,请使用proxy_pass重定向。

1 个答案:

答案 0 :(得分:0)

考虑下面的nginx配置

worker_processes  1;

events {
    worker_connections  1024;
}

server {
    listen 80;
    server_name _;

    location ^~ /sub-directory {
        echo "^~ /sub-directory";
    }

    location /sub-director
    {
        echo "/sub-director";
    }

    location ~* /sub-* {
        echo "~* /sub-*";
    }
}

我使用泊坞容器

跑到上面
sudo docker run -p 80:80 -v $PWD/nginx.conf:/usr/local/openresty/nginx/conf/nginx.conf openresty/openresty

现在考虑以下卷曲声明

$ curl http://192.168.33.100/sub-director/abc
~* /sub.*

 $ curl http://192.168.33.100/sub-director/
~* /sub.*

 $ curl http://192.168.33.100/sub-director
~* /sub.*

 $ curl http://192.168.33.100/sub-directory
^~ /sub-directory

 $ curl http://192.168.33.100/sub-directory/
^~ /sub-directory

 $ curl http://192.168.33.100/sub-directory/abc
^~ /sub-directory

正如您所见,我无法以任何方式到达下面的位置区块

    location /sub-director
    {
        echo "/sub-director";
    }

因为正则表达式会覆盖此块。但我仍然可以达到

    location ^~ /sub-directory {
        echo "^~ /sub-directory";
    }

这就是区别。使用^~并匹配位置时,根本不会评估正则表达式基本位置。