Nginx 路径匹配规则,通配符

2020-03-06  本文已影响0人  愤怒的老照

Location

语法规则

语法规则: location [=|~ |~ *|^~] /uri/ { … }

匹配步骤

“^~ ” 和 “=” 都能阻止继续搜索正则 location,区别是什么?

共同点是它们都能阻止继续搜索正则 location
不同点是 “^~ ” 依然遵守 “最大前缀” 匹配规则,然而 “=” 不是 “最大前缀”,而是严格匹配

index

在nginx的location块中,可以增加index来配置初始页

server {
    listen      80;
    server_name example.org www.example.org;    
    
    location / {
        root    /data/www;
        index   index.html index.php;
    }
    
    location ~ \.php$ {
        root    /data/www/test;
    }
}

index的原理如下:

如果文件存在,则使用文件作为路径,发起内部重定向。直观上看上去就像再一次从客户端发起请求,Nginx再一次搜索location一样。
既然是内部重定向,域名+端口不发生变化,所以只会在同一个server下搜索。

那么上面的例子中,如果你使用example.orgwww.example.org直接发起请求,那么首先会访问到“/”的location,结合root与index指令,会先判断/data/www/index.html是否存在,如果不,则接着查看
/data/www/index.php ,如果存在,则使用/index.php发起内部重定向,就像从客户端再一次发起请求一样,Nginx会再一次搜索location,毫无疑问匹配到第二个~ .php$,从而访问到/data/www/test/index.php。

root和alias

root和alias都可以表示本地路径,要区别在于nginx如何解释location后面的uri,这会使两者分别以不同的方式将请求映射到服务器文件上。
root的处理结果是:root路径+location路径
alias的处理结果是:使用alias路径替换location路径
alias是一个目录别名的定义,root则是最上层目录的定义。
还有一个重要的区别是alias后面必须要用“/”结束,否则会找不到文件的。。。而root则可有可无~~

有时修改nginx配置文件,nginx -s reload重启后不起作用,经排查是启动了多个nginx,kill后启动就好了。

上一篇 下一篇

猜你喜欢

热点阅读