nginx location模块--匹配规则

Location语法语法:location [=|~|~*|^~] /uri/ { … }
= --> 开头表示精确匹配
^~ --> 开头表示uri以某个常规字符串开头,理解为匹配url路径即可。
nginx不对url做编码,因此请求为/static/20%/aa,可以被规则^~ /static/ /aa匹配到(注意是空格)。
~ --> 开头表示区分大小写的正则匹配
~* --> 开头表示不区分大小写的正则匹配
!~和!~* --> 分别为区分大小写不匹配及不区分大小写不匹配的正则
/ --> 通用匹配,任何请求都会匹配到。
多个location配置的情况下匹配顺序为:
首先匹配=,其次匹配^~, 其次是按文件中顺序的正则匹配,最后是交给 / 通用匹配。当有匹配成功时候,停止匹配,按当前匹配规则处理请求。
例子,有如下匹配规则:
location = / {
#http://localhost/ 访问根目录/
#规则A
}
location = /login {
#http://localhost/login
#规则B
}
location ^~ /static/ {
#http://localhost/static/a.html
#http://localhost/static/c.png 则优先匹配到 规则C
#规则C
}
#http://localhost/a.gif, http://localhost/b.jpg 将匹配规则D和规则E,但是规则D顺序优先,规则E不起作用,
location ~ \.(gif|jpg|png|js|css)$ {
#规则D
}
location ~* \.png$ {
#http://localhost/a.PNG 则匹配规则E,而不会匹配规则D,因为规则E不区分大小写。
#规则E
}
http://localhost/a.xhtml 不会匹配规则F和规则G,
http://localhost/a.XHTML 不会匹配规则G,因为不区分大小写。
规则F,规则G属于排除法,符合匹配规则但是不会匹配到,所以想想看实际应用中哪里会用到。
location !~ \.xhtml$ {
#规则F
}
location !~* \.xhtml$ {
#规则G
}
访问http://localhost/category/id/1111 最终匹配到规则H,因为以上规则都不匹配,这个时候应该是nginx转发请求给后端应用服务器,
比如FastCGI(php),tomcat(jsp),nginx作为方向代理服务器存在。
location / {
#http://localhost/register
#规则H
}
所以实际使用中,个人觉得至少有三个匹配规则定义,如下:
#直接匹配网站根,通过域名访问网站首页比较频繁,使用这个会加速处理,官网如是说。
#这里是直接转发给后端应用服务器了,也可以是一个静态首页
# 第一个必选规则
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/;
} #第三个规则就是通用规则,用来转发动态请求到后端应用服务器
#非静态文件请求就默认是动态请求,自己根据实际把握
#毕竟目前的一些框架的流行,带.php,.jsp后缀的情况很少了
location / {
proxy_pass http://tomcat:8080/
}
对于以上基础推荐配置,有一个补充,就是关于转发有一点需要注意。例如下面配置,对一个目录转发:
location ^~ /outer/ {
#case A: url最后以/结尾
proxy_pass http://tomcat:8080/
#case B: url最后没有/
#proxy_pass http://tomcat:8080
}
关键在于最后的/,访问localhost/outer/in.html,其中case A会转发到tomcat:8080/in.html, 而case B会转发到tomcat:8080/outer/in.html,所以务必注意了。
nginx location模块--匹配规则的更多相关文章
- nginx location URI匹配规则
当nginx收到一个请求后,会截取请求的url部份,去搜索所有location指令中定义的URI匹配模式.在server模块中可以定义多个location指令来匹配不同的url请求,多个不同的loca ...
- nginx location 正则匹配
nginx 统计语句1.根据访问IP统计UV awk '{print $1}' access.log|sort | uniq -c |wc -l2.统计访问URL统计PV awk '{print $7 ...
- nginx之location的匹配规则
nginx之location的匹配规则 一.语法规则 location [=|~|~*|^~] /uri/ { - } 符号 含义 = 开头表示精确匹配 ^~ 开头表示 uri 以某个常规字符串开头 ...
- Nginx 关于 location 的匹配规则详解
有些童鞋的误区 1. location 的匹配顺序是“先匹配正则,再匹配普通”. 矫正: location 的匹配顺序其实是“先匹配普通,再匹配正则”.我这么说,大家一定会反驳我,因为按“先匹配普通, ...
- Nginx location指令匹配顺序规则
location匹配命令 1. “= ”,字面精确匹配, 如果匹配,则跳出匹配过程.(不再进行正则匹配) 2. “^~ ”,最大前缀匹配,如果匹配,则跳出匹配过程.(不再进行正则匹配) 3. 不带任何 ...
- Nginx location模块整理
location模块 Nginx location location 指令的作用是根据用户请求的URI来执行不同的应用,URI就是根据用户请求到的网址URL进行匹配,匹配成功了进行相关的操作. loc ...
- Nginx Location模块
相关知识点:URI:统一资源标识符,是一个用于标识某一互联网资源名称的字符串,该种标识允许用户对任何的资源通过特定的协议进行交互操作.URL:统一资源定位符,由三部分组成(1)http://协议 (2 ...
- Nginx之location 匹配规则详解
有些童鞋的误区 1. location 的匹配顺序是“先匹配正则,再匹配普通”. 矫正: location 的匹配顺序其实是“先匹配普通,再匹配正则”.我这么说,大家一定会反驳我,因为按“先匹配普通, ...
- nginx location匹配及rewrite规则
location匹配规则 1. 实例 server{ location = \ { [配置A] } location / { [配置B] } location = /images/ { [配置C] } ...
随机推荐
- jqeury datatable
1.自定义列信息 "aoColumnDefs":[ { ...
- constraint更新表列约束默认值
--更新约束 alter TABLE [dbo].[Sk_Recruit] drop constraint DF_Sk_Recruit_lastcommenttime go alter TABLE ...
- 设置TableViewcell标题不悬浮
- (void)scrollViewDidScroll:(UIScrollView *)scrollView { CGFloat sectionHeaderHeight = 40; if (scrol ...
- Java核心知识点学习----多线程 倒计时记数器CountDownLatch和数据交换的Exchanger
本文将要介绍的内容都是Java5中的新特性,一个是倒计时记数器---CountDownLatch,另一个是用于线程间数据交换的Exchanger. 一.CountDownLatch 1.什么是Coun ...
- PHP对自己I/O流访问的封装(转)
php://stdin:访问PHP进程相应的输入流,比如用在获取cli执行脚本时的键盘输入. php://stdout:访问PHP进程相应的输出流. php://stderr:访问PHP进程相应的错误 ...
- Sql 中text类型字段判断是否为空
用 len关键字,字段=''会报错:数据类型 text 和 varchar 在 equal to 运算符中不兼容. 正确方法: 1. 字段 is null 2. datalength(字段)=0 注: ...
- AngularJs自定义指令详解(1) - restrict
下面所有例子都使用angular-1.3.16.下载地址:http://cdn.bootcss.com/angular.js/1.3.16/angular.min.js 既然AngularJs快要发布 ...
- Java如何将html转以后的字符转化成正常显示的字符
String str = "“!@#¥%……&——+”";//“!@#¥%……&——+” 中文状态下的标点符号,进过html转换了 String convStr ...
- Windows server 2003 WINS的配置和使用详解
NetBios名称概述 网络中的一台计算机可以使用NETBIOS和DNS两种命名方式为其命名,在NETBIOS标准中,使用长度不超 过16个字符的名称来惟一标识每个网络资源,用于标识资源或服务类型.在 ...
- linux 常用目录
/bin 执行文件 ls, mv, rm, mkdir, rmdir, gzip, tar, telnet /boot linux核心文件内核 vmlinuz-xxx(Linux 的 Kernel ...