nginx:location tilde regex vs path

nginx:location tilde regex vs path,nginx,reverse-proxy,nginx-location,proxypass,Nginx,Reverse Proxy,Nginx Location,Proxypass,这两个nginx指令之间有什么区别 location^~/sub目录 位置/子目录 在下面的代码块中,使用proxy\u pass重定向,如果这会造成差异。考虑下面的nginx配置 worker_processes 1; events { worker_connections 1024; } server { listen 80; server_name _; location ^~ /sub-directory { echo "^~ /

这两个nginx指令之间有什么区别

location^~/sub目录

位置/子目录


在下面的代码块中,使用
proxy\u pass
重定向,如果这会造成差异。

考虑下面的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-*";
    }
}
我使用docker容器在上面运行

sudo docker run -p 80:80 -v $PWD/nginx.conf:/usr/local/openresty/nginx/conf/nginx.conf openresty/openresty
现在考虑下面的curl语句

$ 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";
    }
这就是区别。当您使用
^ ~
并匹配位置时,则根本不计算正则表达式基位置

这取决于你的其他位置