Nginx Location规则
Nginx由内核和模块组成,其中内核的设计非常微小和简洁,完成的工作也非常简单,仅仅通过查找配置文件将客户端的请求映射到一个location block,而location是Nginx配置中的一个指令,用于访问的URL匹配,而在这个location中所配置的每个指令将会启动不同的模块去完成相应的工作。
默认Nginx.conf配置文件中至少存在一个location /,即表示客户端浏览器请求的URL为:域名+/,如果location /newindex/,则表示客户端浏览器请求的URL为:域名+/newindex/。常见Location匹配URL的方式如下:
= 字面精确匹配; ^~ 最大前缀匹配; / 不带任何前缀:最大前缀匹配; ~ 大小写相关的正则匹配; ~* 大小写无关的正则匹配; @ location内部重定向的变量。 |
其中Location =、^~、/属于普通字符串匹配,Location ~、~*属于正则表达式匹配,Location优先级与其在Nginx.conf配置文件中的先后顺序无关。
Location = 精确匹配会第一个被处理,如果发现精确匹配,Nginx则停止搜索其他任何Location的匹配。
普通字符匹配,正则表达式规则和完整URL规则将被优先和查询匹配,^~为最大前缀匹配,如果匹配到该规则,Nginx则停止搜索其他任何Location的匹配,否则nginx会继续处理其他location指令。
正则匹配"~"和"~*",如果找到相应的匹配,则Nginx停止搜索其他任何Location的匹配;当没有正则表达式或者没有正则表达式被匹配的情况下,那么匹配程度最高的逐字匹配指令会被使用。
Location规则匹配优先级总结如下:
(location =) > (location 完整路径) > (location ^~ 路径) > (location ~|~* 正则顺序) > (location 部分起始路径) > (location /) |
Location 案例演示
添加echo-nginx-module模块支持在配置文件中使用echo、sleep、time及exec等类似shell命令
#下载echo模块
wget https://github.com/openresty/echo-nginx-module/archive/v0.61.tar.gz
#重新预编译、编译、安装Nginx
[root@localhost nginx-1.14.0]# ./configure --add-module=../echo-nginx-module-0.61/
[root@localhost nginx-1.14.0]# make && make install
[root@localhost nginx-1.14.0]# /usr/local/nginx/sbin/nginx -V
nginx version: nginx/1.14.0
built by gcc 4.8.5 20150623 (Red Hat 4.8.5-16) (GCC)
configure arguments: --add-module=../echo-nginx-module-0.61/
--------------------------------------------------------------------------------------------------
Location案例
(1)Location = 精确匹配会第一个被处理,如果发现精确匹配,Nginx则停止搜索其它任何Location的匹配。增加配置如下:
server {
省略...
location / {
echo 'test1';
}
location = / {
echo 'test2';
}
省略...
}
[root@localhost nginx]# curl 10.0.0.12
test2
增加匹配 /index.html
location = /index.html {
echo 'test3';
}
[root@localhost nginx]# curl 10.0.0.12/index.html
test3
[root@localhost nginx]# curl 10.0.0.12
test2
[root@localhost nginx]# curl 10.0.0.12/test.html
test1
默认“/”解释:“/”匹配任何请求,因为所有请求都是以“/”开始;但是更长字符匹配或者正则表达式匹配会优先匹配,“/”优先级最低。
注:在这个案例中我们访问精确匹配必须是和配置文件规定的完全匹配才会匹配到对应的内容,如果没有匹配到任何的精确匹配则会交给 / 匹配。
--------------
(2)测试目录匹配,有两种配置模式,,目录匹配或前缀匹配,任选其一或搭配使用。
= #字面精确匹配;
location = /images/ {
echo 'test4';
}
[root@localhost nginx]# curl 10.0.0.12/images
test1
[root@localhost nginx]# curl 10.0.0.12/images/
test4
^~最大前缀匹配;域名后面匹配的目录必须是location写的参数,才能匹配到location中的文件。
location ^~ /images/ {
echo 'test5';
}
[root@localhost nginx]# curl 10.0.0.12/images
test1
[root@localhost nginx]# curl 10.0.0.12/images/
test5
[root@localhost nginx]# curl 10.0.0.12/images/111
test5
注:匹配 / 后面的内容以 /images/ 开头的内容。
域名后面跟的第一个斜杠代表“/”,第二个斜杠就代表在访问的是一个目录,第三个斜杠代表可能有两层目录。
#10.0.0.12/images 代表访问的 images 这个文件
#10.0.0.12/images/ 代表访问的 images 这个目录
(3)正则文件匹配
~ :大小写相关的正则匹配;
~*:大小写无关的正则匹配;
location ~* \.(html|txt|gif|jpg|jpeg)$ {
echo 'test6';
}
location ~ \.(html|txt|gif|jpg|jpeg)$ {
echo 'test7';
}
#正则匹配中“.” 号匹配的时候默认是匹配所有单个字符,加上“\”转义符号,将“.” 号转义成真正意义上的点号。
#(html|txt|gif|jpg|jpeg)表示匹配html、txt等字符。
# $ 号代表必须以对应的字符结尾。
#可以通过调整两个的顺序来测试。
[root@localhost nginx]# curl 10.0.0.12/index.html
test6
[root@localhost nginx]# curl 10.0.0.12/index.HTML
test6
注:~大小写相关匹配,规定必须和配置文件一样(配置文件写的大小写来确定)的小写或者大写才能匹配到该请求。大小写无关匹配,不论是大写还是小写都会匹配到该请求(例如:以HTML和html结尾都会匹配到test7)
(4)基础正则匹配
location ~ .*\.(gif|jpg|jpeg|bmp|png|ico|txt|js|css)$
.号:匹配任意单个字符;
*号:匹配前面的字符任意次。
#这个正则匹配的任意字符开头的以gif|jpg|jpeg|bmp|png|ico|txt|js|css这些文件结尾的后缀名,才能匹配这个规则。
Nginx Location规则的更多相关文章
- Nginx location规则匹配
^~ 标识符匹配后面跟-一个字符串.匹配字符串后将停止对后续的正则表达式进行匹配,如location ^~ /images/ , 在匹配了/images/这个字符串后就停止对后续的正则匹配 = 精 ...
- nginx location 路由的几个配置纪要
1:网上没有查到在线测试 nginx location 规则的网址 在服务器上可以通过 return 返回测试比如 把#号去掉 # location /admin\.php(.*) # { #def ...
- 详细解析 nginx uri 如何匹配 location 规则
location 是 nginx 配置中出现最频繁的配置项,一个 uri 是如何与多个 location 进行匹配的? 在有多个 location 都匹配的情况下,如何决定使用哪一个 location ...
- nginx 反向代理 配置 https 实现http https同时存在 经测试 支持location 规则
server { listen ssl; #监听443端口 server_name www.app01.com; ssl on; #启用ssl加密 ssl_certificate /etc/cert/ ...
- nginx里面的location 规则匹配
nginx location语法 ~ # 区分大小写的正则匹配 location ~ \.(gif|jpg|png|js|css)$ { #规则D } ~* # 不区分大小写的正则匹配(和~的功能相同 ...
- 附001.Nginx location语法规则
一 location规则 1.1 location语法 基本语法: location [=|~|~*|^~]/uri/{...} 修饰符释义: 1 = #表示精确严格匹配,只有请求的url路径与后面的 ...
- Nginx location 匹配顺序整理
Nginx location模块整理 具体的Nginx安装就不在这里描述了,这里只是为了对location的描述 Nginx环境 a. 查看当前系统cat /etc/redhat-release [r ...
- Nginx Location配置总结
Nginx Location配置总结 语法规则: location [=|~|~*|^~] /uri/ { - }= 开头表示精确匹配^~ 开头表示uri以某个常规字符串开头,理解为匹配 url路径即 ...
- nginx location语法使用说明
语法规则: location [=|~|~*|^~] /uri/ { … } = 开头表示精确匹配 ^~ 开头表示uri以某个常规字符串开头,理解为匹配 url路径即可.nginx不对url做编码,因 ...
随机推荐
- 如何将redis加入到Windows 服务中
将redis加入到Windows 服务的方法 原文出自:https://www.cnblogs.com/zoro-zero/p/5761507.html, 本文稍作完善 1.下载zip的Redis,对 ...
- samba安装应用实例-2
应用实例: 先安装samba软件,yum install -y samba1.需求:共享一个目录,使用用户名和密码登录才可以访问,要求可读可写.(1)首先打开samba配置文件/etc/samba/s ...
- LoadRunner 技巧之 自动关联
LoadRunner 技巧之 自动关联 这一节讲loadunner 关联的问题,其实这个东西理解起来简单,但说起来比较麻烦. 关联的原理: ...
- win10安装mysql-最简单教程
工具下载地址 链接: https://pan.baidu.com/s/1XL2wUDrcd9NpT8NOcXoDTQ 提取码: vu34 下载好之后解压. 在目录D:\Program Files\my ...
- HTTP Status 500 ? Internal Server Error
getWriter()和getOutputStream()不能同时调用 HTTP Status 500 ? Internal Server Error Type Exception Report Me ...
- IK分词器的安装与使用IK分词器创建索引
之前我们创建索引,查询数据,都是使用的默认的分词器,分词效果不太理想,会把text的字段分成一个一个汉字,然后搜索的时候也会把搜索的句子进行分词,所以这里就需要更加智能的分词器IK分词器了. 1. i ...
- Day05:循环问题 / 数组
循环嵌套 循环结构中包含完整的循环结构. 注意: 循环嵌套不限层次 各种循环语句都可以互相嵌套 内层循环中出现的break和continue只作用在内层循环中 外层循环循环一次 内层循环循环一遍 Ja ...
- github局部不同图片合并插件
用于解决游戏开发时,一套图里有局部地区图片不同其他地方相同,导致资源重复过大的问题 地址:https://github.com/Elringus/SpriteDicing
- python 并发编程 多线程 event
event实现了一个线程通知另外一个线程 线程的一个关键特性是每个线程都是独立运行且状态不可预测. 1.为什么要使用Event对象: 如果程序中的其 他线程需要通过判断某个线程的状态来确定自己下一步的 ...
- Redhat7 CentOS7安装阿里云的yum源
先说CentOS的 1.备份 [root@harry ~]# cd /etc/yum.repos.d/ [root@harry yum.repos.d]# mkdir repo_bak [root@b ...