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] } ...
随机推荐
- nested exception is com.mysql.jdbc.PacketTooBigException: Packet for query is too large (1044 > 1024
HTTP Status 500 - type Exception report message description The server encountered an internal error ...
- Ubuntu14.04环境下Samba报错排错过程
排错的方法和思路非常重要,日志非常非常非常非常重要!!! 搭建好Samba之后,windos访问一直下面这个错误,然后傻逼一样一直百度百度,一弄又是几天,但是经过自己一步一步的排错,弄成功之后,那心情 ...
- 济南学习D2T2__数学分析题
[问题描述]有N个数,随机选择一段区间,如果这段区间的所有数的平均值在[l,r]中则你比较厉害.求你比较厉害的概率.[输入格式]第一行有三个数N,l,r,含义如上描述.接下来一行有N个数代表每一个数的 ...
- boxes
boxes [英][bɒksɪz][美][bɑ:ksɪz] n.盒( box的名词复数 ); 一盒; 电视; 小亭; v.把…装入盒[箱,匣]中( box的第三人称单数 ); 拳击; 以上结果来自 ...
- 设置h5页面不可复制文字
* { moz-user-select: -moz-none; -moz-user-select: none; -o-user-select: none; -khtml-user-select: no ...
- python学习之——小闹钟(持续完善ing)
"啊,坏了,我忘了那啥啥了~~~" 为了不坏了,动手做一个小闹钟吧,一点点完善的过程一定美好极了,必像等待培育许久的花儿绽放一样,不多说,加油,期待↖(^ω^)↗ #! /usr/ ...
- 数据模型类对比 反射c#
using System;using System.ComponentModel.DataAnnotations; public class LoginModel { ...
- js-DOM-页面元素的兼容性、常用事件、节点
页面元素的兼容性: 所谓的兼容性指的就是当前浏览器是否支持当前对象的属性或是方法,如果支持就是兼容,如果不支持就是不兼容. 举个例子: /** * 设置页面标签之间的文本内容的兼容性写法 * @par ...
- Java多线程死锁的产生实例
死锁产生的四个必要条件: (1) 互斥条件:一个资源每次只能被一个进程使用.(2) 请求与保持条件:一个进程因请求资源而阻塞时,对已获得的资源保持不放.(3) 不剥夺条件:进程已获得的资源,在末使用完 ...
- innobackupex 重启MySQL
当重新修改了MySQL的数据目录时: 重启报错: Starting MySQL.The server quit without updating PID file (/[FAILED]l/mysql/ ...