您的位置:首页 > 运维架构 > Nginx

Nginx—核心配置location匹配规则说明

2018-02-22 17:15 633 查看
点击有惊喜

location介绍

location指令是Nginx中最核心的一项配置,根据预先定义的URL匹配规则来接收用户发送的请求,根据匹配结果,将请求转发到后台服务器、非法的请求直接拒绝并返回403,404,500错误处理等。

location指令语法

location [=|~|~*|^~|@] /uri/ { … } 或 location @name { … }

location的URI匹配模式

location指令分为两种匹配模式:

1. 普通字符串匹配:“=”,“^~ ”和“@ ” 和无任何前缀的属于普通location,其中 “ ^~ ”的意思是“非正则,不需要继续正则匹配”。

2. 正则匹配:以~或~*开头表示正则匹配,~*表示正则不区分大小写。

匹配规则

①精确匹配 =

②前缀匹配 ^~

③按文件中顺序的正则匹配

④匹配不带任何修饰的前缀匹配。

⑤交给 / 通用匹配

当有匹配成功时候,停止匹配,按当前匹配规则处理请求

匹配实例

location = / {

echo “规则A”;

}

location = /login {

echo “规则B”;

}

location ^~ /static/ {

echo “规则C”;

}

location ^~ /static/files {

echo “规则X”;

}

location ~ \.(gif|jpg|png|js|css)$ {

echo “规则D”;

}

location ~* \.png$ {

echo “规则E”;

}

location /img {

echo “规则Y”;

}

location / {

echo “规则F”;

}

那么产生的效果如下:

访问根目录/,比如http://localhost/将匹配规则A。

访问http://localhost/login将匹配规则B,http://localhost/register则匹配规则F。

访问http://localhost/static/a.html将匹配规则C。

访问http://localhost/static/files/a.exe将匹配规则X,虽然规则C也能匹配到,但因为最大匹配原则,最终选中了规则X。可以测试下,去掉规则X,则当前URL会匹配上规则C。

访问http://localhost/a.gif,http://localhost/b.jpg将匹配规则D和规则E,但是规则D顺序优先,规则E不起作用,而http://localhost/static/c.png则优先匹配到规则C。

访问http://localhost/a.PNG则匹配规则E,而不会匹配规则D,因为规则E不区分大小写。

访问http://localhost/img/a.gif会匹配上规则D,虽然规则Y也可以匹配上,但是因为正则匹配优先,而忽略了规则Y。

访问http://localhost/img/a.tiff会匹配上规则Y。

访问http://localhost/category/id/1111则最终匹配到规则F,因为以上规则都不匹配,这个时候应该是Nginx转发请求给后端应用服务器,比如 FastCGI(php),tomcat(jsp),Nginx 作为反向代理服务器存在。

SO实际应用就有三种常见的情况,如下:

# 直接匹配网站根,通过域名访问网站首页比较频繁,使用这个会加速处理,第一个必选规则

location = / {

proxy_pass http://tomcat:8080/index
}

# 第二个必选规则是处理静态文件请求,这是 nginx作为http服务器的强项,有两种配置模式,目录匹配或后缀匹配,任选其一或搭配使用(动静分离的原理步骤)

location ^~ /static/ {

root /webroot/static/;

}

location ~* \.(gif|jpg|jpeg|png|css|js|ico)$ {

root /webroot/res/;

}

# 第三个规则就是通用规则,用来转发动态请求到后端应用服务器

location / {

proxy_pass http://tomcat:8080/
}

location的原理图



点击有惊喜

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Nginx