注册
|
登录
发帖
热搜
活动
交友
discuz
论坛
BBS
翼度工具
翼度网址导航
开发工具
Linux命令速查
网页设计配色表
在线制作icon
颜色代码选取器
翼度科技
»
论坛
›
云主机
›
LINUX
›
查看内容
返回列表
发新帖
Nginx Location 基本配置
君不问高堂明镜
君不问高堂明镜
当前离线
积分
42
14
主题
14
帖子
42
积分
新手上路
新手上路, 积分 42, 距离下一级还需 8 积分
新手上路, 积分 42, 距离下一级还需 8 积分
积分
42
发消息
显示全部楼层
基本语法格式:
Location block 的基本语法形式是:
location [=|~|~*|^~|@] pattern { ... }
[=|~|~*|^~|@] 被称作 location modifier ,这会定义 Nginx 如何去匹配其后的 pattern ,以及该 pattern 的最基本的属性(简单字符串或正则表达式)
复制代码
location 的匹配符
1.等于匹配符:=
等于匹配符就是等号,特点可以概括为两点:精确匹配,优先级最高,匹配成功后则停止向下搜索不支持正则表达式
server {
server_name website.com;
location = /abcd {
[…]
}
}
匹配情况:
http://website.com/abcd # 正好完全匹配
http://website.com/ABCD # 如果运行 Nginx server 的系统本身对大小写不敏感,比如 Windows ,那么也匹配
http://website.com/abcd?param1m2 # 忽略查询串参数(query string arguments),这里就是 /abcd 后面的 ?param1m2
http://website.com/abcd/ # 不匹配,因为末尾存在反斜杠(trailing slash),Nginx 不认为这种情况是完全匹配
http://website.com/abcde # 不匹配,因为不是完全匹配
复制代码
2.空匹配符
空匹配符的特点是:匹配以指定模式开始的 URI,区分大小写,字符串匹配不支持正则表达式
# 可以不写 location modifier ,Nginx 仍然能去匹配 pattern 。这种情况下,匹配那些以指定的 patern 开头的 URI,注意这里的 URI 只能是普通字符串,不能使用正则表达式。
server {
server_name website.com;
location /abcd {
[…]
}
}
匹配情况:
http://website.com/abcd # 正好完全匹配
http://website.com/ABCD # 如果运行 Nginx server 的系统本身对大小写不敏感,比如 Windows ,那么也匹配
http://website.com/abcd?param1m2 # 忽略查询串参数(query string arguments),这里就是 /abcd 后面的 ?param1m2
http://website.com/abcd/ # 末尾存在反斜杠(trailing slash)也属于匹配范围内
http://website.com/abcde # 仍然匹配,因为 URI 是以 pattern 开头的
复制代码
3.正则匹配符:~ 和 ~*
正则匹配符是可以使用正则表达式的匹配符。不过这里要强调的是,一般来说~是指:区分大小写的正则匹配但是对于一些对大小写不敏感的操作系统,这两者没有区别。另外一个就是^~,其表示以指定模式开始的正则匹配。
# 这个 location modifier 对大小写敏感,且 pattern 须是正则表达式
server {
server_name website.com;
location ~ ^/abcd$ {
[…]
}
}
匹配情况:
http://website.com/abcd # 完全匹配
http://website.com/ABCD # 不匹配,~ 对大小写是敏感的
http://website.com/abcd?param1m2 # 忽略查询串参数(query string arguments),这里就是 /abcd 后面的 ?param1m2
http://website.com/abcd/ # 不匹配,因为末尾存在反斜杠(trailing slash),并不匹配正则表达式 ^/abcd$
http://website.com/abcde # 不匹配正则表达式 ^/abcd$
# 注意:对于一些对大小写不敏感的系统,比如 Windows ,~ 和 ~* 都是不起作用的,这主要是操作系统的原因。
复制代码
~* 表示:不区分大小写的正则匹配
server {
server_name website.com;
location ~* ^/abcd$ {
[…]
}
}
匹配情况:
http://website.com/abcd # 完全匹配
http://website.com/ABCD # 匹配,这就是它不区分大小写的特性
http://website.com/abcd?param1m2 # 忽略查询串参数(query string arguments),这里就是 /abcd 后面的 ?param1m2
http://website.com/abcd/ # 不匹配,因为末尾存在反斜杠(trailing slash),并不匹配正则表达式 ^/abcd$
http://website.com/abcde # 不匹配正则表达式 ^/abcd$
复制代码
4. ^~
匹配情况类似 2. (空字符) 的情况,以指定匹配模式开头的 URI 被匹配,不同的是,一旦匹配成功,那么 Nginx 就停止去寻找其他的 Location 块进行匹配了(与 Location 匹配顺序有关)
5. 内部访问符:@
用于定义一个 Location 块,且该块不能被外部 Client 所访问,只能被 Nginx 内部配置指令所访问,比如 try_files or error_page。一般用于错误页面等。
匹配符优先级
Location匹配规则 语法规则: 【= | ^~ | ~ | ~* | / | /uri 】
location = /uri = 表示精确匹配,只有完全匹配上才能生效,若找到,停止搜索;
location ^~ /uri ^~开头表示对URL路径进行前缀匹配,并且在正则匹配之前,若找到,停止搜索;
location ~ pattern ~开头表示区分大小写的正则匹配,按配置文件顺序匹配;
location ~* pattern ~*开头表示不区分大小写的正则匹配,按配置文件顺序匹配;
location !~和!~* 分别为区分大小写不匹配及不区分大小写不匹配 的正则
location /uri 不带任何修饰符,表示前缀匹配,在正则匹配之后;
location / 通用匹配,任何未匹配到其他location的请求都会匹配到,相当于default;
复制代码
多个location配置的情况匹配顺序为
首先精确匹配 = ;
其次前缀匹配 ^~;
其次是按照配置文件中的正则匹配;
然后匹配不带任何修饰符的前缀匹配;
最后交给/通用匹配
复制代码
案例
location = / {
# 精确匹配 / ,主机名后面不能带任何字符串
[ configuration A ]
}
location / {
# 因为所有的地址都以 / 开头,所以这条规则将匹配到所有请求
# 但是正则和最长字符串会优先匹配
[ configuration B ]
}
location /documents/ {
# 匹配任何以 /documents/ 开头的地址,匹配符合以后,还要继续往下搜索
# 只有后面的正则表达式没有匹配到时,这一条才会采用这一条
[ configuration C ]
}
location ~ /documents/Abc {
# 匹配任何以 /documents/ 开头的地址,匹配符合以后,还要继续往下搜索
# 只有后面的正则表达式没有匹配到时,这一条才会采用这一条
[ configuration CC ]
}
location ^~ /images/ {
# 匹配任何以 /images/ 开头的地址,匹配符合以后,停止往下搜索正则,采用这一条。
[ configuration D ]
}
location ~* \.(gif|jpg|jpeg)$ {
# 匹配所有以 gif,jpg或jpeg 结尾的请求
# 然而,所有请求 /images/ 下的图片会被 config D 处理,因为 ^~ 到达不了这一条正则
[ configuration E ]
}
location /images/ {
# 字符匹配到 /images/,继续往下,会发现 ^~ 存在
[ configuration F ]
}
location /images/abc {
# 最长字符匹配到 /images/abc,继续往下,会发现 ^~ 存在
# F与G的放置顺序是没有关系的
[ configuration G ]
}
location ~ /images/abc/ {
# 只有去掉 config D 才有效:先最长匹配 config G 开头的地址,继续往下搜索,匹配到这一条正则,采用
[ configuration H ]
}
location ~* /js/.*/\.js
复制代码
来源:
https://www.cnblogs.com/qianyuliang/p/17463260.html
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!
上一篇:
Tinyhttpd:源码分析【3】
下一篇:
一分钟学一个 Linux 命令 - mv 和 cp
发表于 2023-6-7 15:02:39
举报
回复
使用道具
分享
返回列表
发新帖
本版积分规则
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
|
立即注册
快速回复
快速回复
返回顶部
返回顶部
返回列表
返回列表