博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Nginx—核心配置location匹配规则说明
阅读量:6268 次
发布时间:2019-06-22

本文共 1764 字,大约阅读时间需要 5 分钟。

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的原理图

05e06a861b5e1dd0d487b7b7c31f9ccf2f1aa863

转载地址:http://pvcpa.baihongyu.com/

你可能感兴趣的文章
leetcode(二)
查看>>
利用css实现居中的方法
查看>>
Spring + Hibernate 框架
查看>>
添加浏览器的用户样式表
查看>>
LigerUI学习笔记之布局篇 layout
查看>>
LeetCode题解(二)
查看>>
Mybatis通用Mapper
查看>>
文件磁盘命令(就该这么学6章内容)
查看>>
2016-207-19 随笔
查看>>
java的double类型如何精确到一位小数?
查看>>
看看国外的javascript题目,你能全部做对吗?
查看>>
ffmpeg 如何选择具有相同AVCodecID的编解码器 (AVCodec)
查看>>
真正解决 Windows 中 Chromium “缺少 Google API 密钥” 的问题
查看>>
Spring 之 AOP
查看>>
软件项目管理|期末复习(二)
查看>>
直接调用VS.net2005中的配置界面
查看>>
程序员的自我修养五Windows PE/COFF
查看>>
关于字符集,编码格式,大小端的简单总结
查看>>
js string 转 int Number()
查看>>
课堂练习:ex 4-20
查看>>