server 和 location 中的 root,和location语法
server 和 location 中的 root
server 和 location 中都可以使用 root,举个例子:
http { server {listen 80;server_name www.yayujs.com;root /home/www/website/;location / {root /home/www/ts/;index index.html;}}
}
如果两者都出现,是怎样的优先级呢?
简单的来说,就是就近原则,如果 location 中能匹配到,就是用 location 中的 root 配置,忽略 server 中的 root,当 location 中匹配不到的时候,则使用 server 中的 root 配置。
Location语法
location [ = | ~ | ~* | ^~ ] uri { ... }
http { server {listen 80;server_name www.yayujs.com;location / {root /home/www/ts/;index index.html;}}
}
复制代码
大致的意思是,当你访问 http://www.yayujs.com 的 80 端口的时候,返回 /home/www/ts/index.html 文件。
重点看方括号中的 [ = | ~ | ~* | ^~ ],其中 | 分隔的内容表示你可能会用到的语法,其中:
- = 表示精确匹配,比如:
location = /test {return 200 "hello";
}# /test ok
# /test/ not ok
# /test2 not ok
# /test/2 not ok
- ~ 表示区分大小写的正则匹配,比如:
location ~ ^/test$ {[ configuration ]
}# /test ok
# /Test not ok
# /test/ not ok
# /test2 not ok
- ~* 表示不区分大小写的正则匹配
location ~* ^/test$ { [ configuration ]
}# /test ok
# /Test ok
# /test/ not ok
# /test2 not ok
- ^~ 表示 uri 以某个字符串开头
location ^~ /images/ { [ configuration ]
}# /images/1.gif ok
而当你不使用这些语法的时候,只写 uri 的时候:
/ 表示通用匹配:
location / { [ configuration ]
}# /index.html ok
匹配顺序
当存在多个 location 的时候,
location 的定义分为两种:
- 前缀字符串(prefix string)
- 正则表达式(regular expression),具体为前面带 ~* 和 ~ 修饰符的
而匹配 location 的顺序为:
- 检查使用前缀字符串的 locations,在使用前缀字符串的 locations 中选择最长匹配的,并将结果进行储存
- 如果符合带有 = 修饰符的 URI,则立刻停止匹配
- 如果符合带有 ^~ 修饰符的 URI,则也立刻停止匹配。
- 然后按照定义文件的顺序,检查正则表达式,匹配到就停止
- 当正则表达式匹配不到的时候,使用之前储存的前缀字符串
再总结一下就是:
在顺序上,前缀字符串顺序不重要,按照匹配长度来确定,正则表达式则按照定义顺序。
在优先级上,= 修饰符最高,^~ 次之,再者是正则,最后是前缀字符串匹配。
我们举几个简单的例子复习下:
server {location /doc {[ configuration A ] }location /docu {[ configuration B ] }
}# 请求 /document 使用 configuration B
# 虽然 /doc 也能匹配到,但在顺序上,前缀字符串顺序不重要,按照匹配长度来确定
server {location ~ ^/doc {[ configuration A ] }location ~ ^/docu {[ configuration B ] }
}# 请求 /document 使用 configuration A
# 虽然 ~ ^/docu 也能匹配到,但正则表达式则按照定义顺序
server {location ^~ /doc {[ configuration A ] }location ~ ^/docu {[ configuration B ] }
}# 请求 /document 使用 configuration A
# 虽然 ~ ^/docu 也能匹配到,但 ^~ 的优先级更高
server {location /document {[ configuration A ] }location ~ ^/docu {[ configuration B ] }
}# 请求 /document 使用 configuration B
# 虽然 /document 也能匹配到,但正则的优先级更高
server 和 location 中的 root,和location语法相关推荐
- nginx中配置root和alias的区别
在nginx中,root和alias都可以代理静态资源,那么他们两个有什么区别呢?在什么情况下使用什么呢. 初识: root和alias都可以在定义在location模块中,都是用来请求资源的真实路径 ...
- Nginx核心模块——HTTP中的配置指令location和rewrite介绍
文章目录 一.正则表达式在学习 1.1 常用的Nginx 正则表达式 二.访问路由location 2.1 location的分类 2.2 location 常用的匹配规则: 2.3 location ...
- nginx 中location中root和alias的区别
nginx指定文件路径有两种方式root和alias,这两者的用法区别,使用方法总结了下,方便大家在应用过程中,快速响应.root与alias主要区别在于nginx如何解释location后面的uri ...
- php中location.reload,js刷新页面location.reload()用法详解
本文介绍了js刷新页面函数location.reload()的用法,有关js location.reload()函数的例子,有需要的朋友参考下. 在javascript编程中,多使用location. ...
- html5中的图片的location,HTML5中的History和Location对象
今天发现原来HTML5对History和Location对象进行了改进,提供了几个新的API.我觉得,这用来结合Ajax来使用,弥补Ajax技术更新内容但不产生历史记录的问题,十分有用. 我很久之前就 ...
- sql docker容器_了解SQL Server Docker容器中的备份和还原操作
sql docker容器 In this 17th article of the series (see the full article index at bottom), we will disc ...
- sql server 快照_在SQL Server合并复制中应用快照时出现外键问题
sql server 快照 This article will review specific SQL Server merge replication issues related to forei ...
- Trying to start MapKit location updates without prompting for location authorization. Must call -[CL
(2)对于Trying to start MapKit location updates without prompting for location authorization. Must call ...
- 数据仓库自动抽取:通过 SQL Server 企业管理器中的数据转换服务 (DTS) 设计器 创建 Analysis Services 处理任务...
本次学习 是为了实现 通过 SQL Server 企业管理器中的 数据转换服务 (DTS) 设计器 创建 Analysis Services 处理任务 以实现数据仓库所需数据的自动抽取转换填充 --- ...
最新文章
- /* * 编程题第五题(20分): 	本题要求你写个程序把给定的符号打印成沙漏的形状。例如给定17个“*”,要求按下列格式打印 	***** 	 *** 	 * 	 *** 	***** 	所谓“
- 苹果AirTag遭破解,网友放出“教程”,可重写程序,可能成为恶意跟踪“神器”...
- 【前端攻略】最全面的水平垂直居中方案与flexbox布局
- Vue — 第四天(components组件)
- 10 PP配置-生产主数据-工作中心相关-定义工作中心公式
- 开放式的Video Captioning,中科院自动化所提出基于“检索-复制-生成”的网络
- 学python要有多少英语词汇量测试_非常适合新手的一个Python爬虫项目: 打造一个英文词汇量测试脚本!...
- 魅族预热魅族18系列:没有中杯 大杯起步
- FreeMarker 日期转换
- js省市二级联动;)
- Chrome 谷歌浏览器中文默认小于12px设置无效解决办法
- emoji无法显示_微信昵称emoji表情,特殊表情导致列表不显示,导出EXCEL报错等问题解决!...
- Linux下C语言编程风格和规范
- 最全Pycharm教程(40)——Pycharm扩展功能之捆绑插件TextMate
- 史上最烂的项目:苦撑 12 年,600 多万行代码
- tornado源码分析-Application
- mysql 3日内_一门三父子
- Linux系统编程第六节——进程的替换(execl、exelp、execle、execv、execvp、execve)
- Excel怎么把横排变竖排,一键转换表格格式
- java 连接不上数据库