2017-08-17 78 views
0

这2个nginx指令有什么区别?nginx:location tilde regex vs path

location ^~ /sub-directory

location /sub-directory

在下面的代码块,使用proxy_pass重定向,如果有差别。

+0

http://nginx.org/r/location取决于您拥有的其他位置 –

回答

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"; 
    } 

所以这就是区别。当您使用^~并且某个位置匹配时,则根本不计算正则表达式基本位置。