网站首页 > 技术教程 正文
由于工作需要,从去年开始使用nginx做web服务器,本文是根据自己的使用经验结合各累文档汇总总结的,如有不正确之处,欢迎指教。
location配置指令用来为网站的各种不同的URI集分别指定不同的配置指令。语法格式如下
location [=|~|~*|^~|@] pattern { … }
需要注意的是,location配置指令有两种工作模式,即正则匹配和普通字符串匹配。只有在使用~或~*修饰符时,指令中的pattern才可以使用正则表达式同URI进行匹配。=,^~或没有使用修饰符这三种情况下,后面的pattern只能使用字符串常量。
我们都知道location可以在配置文件中出现N次,那么就出现了我们经常思考的一个问题,这些location指令是按什么顺序执行呢,或者说谁具有更高的优先级呢?这对配置nginx网站是非常重要的。
当一个网站(虚拟主机,也就是一个server block)中出现多条locatioin配置指令时,nginx是按照先匹配字符串常量再匹配正则表达式的原则来扫描解释location指令。
也就是说,nginx处理location是分两个步骤
1,用“字符串比较”方法处理所有非正则表达式的location指令
2,用“正则匹配”方法处理所有带正则表达式的location指令
下面这几种情况下,会停止处理(或解释,也就是忽略)其它的location指令。
若当前URI和带=修饰符的location中的常量表达式完全匹配,则nginx停止搜索解释其它的location指令
若当前URI和不带任何修饰符的location中的常量表达式完全匹配,则nginx停止搜索解释其它的location指令
若当前URI和带^~修饰符的location中的常量表达式匹配(注意此处不要求完全匹配),则nginx停止搜索解释其它的location指令
若当前URI和某个location中的正则表达式匹配,则nginx停止继续搜索解释其它的location指令
location就是按照这个顺序来处理location指令的。如果经过上面这几个步骤还是没有确定使用哪个location,那么nginx会从之前处理过的没有带修饰符的location指令中选择一个匹配程度最大的一个使用。要注意此时一般也就只有不带修饰符的location指令了,其它的不再起作用了。
server {
server_name www.abc.com;
root /var/www/abc.com;
location = / {
# 只有,请求http://www.abc.com/时,这个指令才起作用
#[ A ]
}
location / {
# 匹配几乎所有的请求,但是,优先级比较低,如果一个请求有其它的带正则的location匹配
# 则使用正则对应的location配置,如果没有正则,那么如果有多个不带任何修饰符的location匹配
# 当前请求,那么比较长的location指令,也就是匹配度越大的location指令优先级高
# http://www.abc.com/images/a.jpg 使用[E]location指令配置
# http://www.abc.com/images/a.png 使用[C]location指令配置,虽然它同时匹配了B,C
# http://www.abc.com/image/a.png 使用[B]location指令配置
#[ B ]
}
location /images/ {
#[ C ]
}
location ^~ /images/ {
# 匹配所有以/images/开始的请求,并停止继续搜索匹配其它的location指令
#[ D ]
}
location ~* \.(gif|jpg|jpeg)$ {
#[ E ]
}
}
详细的过程大概是这样的:
当nginx接收到一个请求,它会先搜索该主机下的所有location,然后依次检查带=修饰符,无修饰符,^~修饰符的location指令,比较URI和指令后面的字符串常量,如果带=的location指令完全匹配(注意是完全匹配),则采用并停止搜索其它的location.如果不是完全匹配,则丢弃,并检查看是否有不带修饰符的location指令,如果有,且完全匹配(注意是完全匹配),则采用并停止搜索其它的location.如果不是完全匹配,不丢弃,但是继续检查看是否有带^~修饰符的location指令,如果有,且匹配(注意是匹配),则采用并停止搜索其它的location。如果不匹配,则按顺序(指的是它们在配置文件中出现的顺序)检查所有的其它带正则表达式的location指令。如果有一个匹配,则停止继续处理其它的带正则的location指令,如果没有匹配的话,则回头看一下之前比较字符串中不带修饰符的,但是不完全匹配的location指令。
简单画了一个nginx处理location指令的流程图
nginx的location指令处理流程
location的指令顺序有的人看到这可能会说和顺序无关,其实在进入到正则匹配阶段,就是由顺序来决定使用哪个带正则的location指令了。
如有错误,欢迎指正,转载请注明出处。
猜你喜欢
- 2024-09-25 Nginx负载均衡之upstream、server、location参数配置
- 2024-09-25 填一个nginx的路径坑(nginx 路径匹配规则)
- 2024-09-25 Nginx Location深入了解匹配优先级的秘密#java面试
- 2024-09-25 Nginx 的 location 指令定义规则和匹配规则
- 2024-09-25 5分钟搞懂nginx的location匹配规则
- 2024-09-25 理解Nginx的location(nginx location url)
- 2024-09-25 Nginx 面试通关秘籍-27.Nginx 中 location 的作用是什么及它的语法?
- 2024-09-25 nginx location在配置中的优先级(nginx 路径匹配优先级)
你 发表评论:
欢迎- 最近发表
-
- Win10 TH2正式版官方ESD映像转换ISO镜像方法详解
- 使用iso镜像升级到Windows 10的步骤
- macOS Ventura 13.2 (22D49) Boot ISO 原版可引导镜像
- 安利一个用ISO镜像文件制作引导U盘的的小工具RUFUS
- CentOS 7使用ISO镜像配置本地yum源
- 用于x86平台的安卓9.0 ISO镜像发布下载:通吃I/A/N、完全免费
- AlmaLinux 9.6发布:升级工具、初步支持IBM Power虚拟化技术
- Rufus写入工具简洁介绍与教程(写入模式)
- 新硬件也能安装使用了,Edge版Linux Mint 21.3镜像发布
- 开源工程师:Ubuntu应该抛弃32位ISO镜像
- 标签列表
-
- 下划线是什么 (87)
- 精美网站 (58)
- qq登录界面 (90)
- nginx 命令 (82)
- nginx .http (73)
- nginx lua (70)
- nginx 重定向 (68)
- Nginx超时 (65)
- nginx 监控 (57)
- odbc (59)
- rar密码破解工具 (62)
- annotation (71)
- 红黑树 (57)
- 智力题 (62)
- php空间申请 (61)
- 按键精灵 注册码 (69)
- 软件测试报告 (59)
- ntcreatefile (64)
- 闪动文字 (56)
- guid (66)
- abap (63)
- mpeg 2 (65)
- column (63)
- dreamweaver教程 (57)
- excel行列转换 (56)
本文暂时没有评论,来添加一个吧(●'◡'●)