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

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—核心配置location匹配规则说明

上一篇:varnish缓存初探(3)—核心配置


下一篇:varnish缓存初探(2)—基础配置