nginx正则及location匹配

一:nginx  location 规则匹配

《1》:^~        标识符匹配后面跟一个字符串。匹配字符串后将停止对后续的正则表达式进行匹配如 location ^~ /images/,在匹配了/images/这个字符串后就停止了对后续的正则匹配

《2》:=          精准匹配,如 location = /,只会匹配url为/的请求->http://www.a.com/

《3》:~          区分大小写的匹配-> location ~ \.jsp$

《4》:~*        不区分大小写的匹配-> location ~* \.jsp$

《5》:!~         对区分大小写的匹配取非

《6》:!~*       对不区分大小写的匹配取非

《7》:/        通用匹配,如果没有其他匹配,任何请求都会被匹配到

二:正则表达式

《1》:*                        重复前面的字符0次或多次

《2》:?                        重复前面的字符0次或1次

《3》:+                        重复前面的字符1次或多次

《4》: .                        匹配除换行符以外的任意1个字符

《5》:(a | b)                           匹配a或b

《6》:^                        以……开头

《7》:$                        以……结尾

《8》:{n}                        重复前面的字符n次

《9》:{n,}                        重复前面的字符n次或更多次

《10》:{n,m}                           重复前面的字符n到m次

《11》:*?                        重复前面的字符0次或多次,但尽可能少重复

《12》:+?                        重复前面的字符1次或更多次,但尽可能少重复

《13》:??                        重复前面的字符0次或1次,但尽可能少重复

《14》:{n,m}?                重复前面的字符n到m次,但尽可能少重复

《15》:{n,}?                        重复前面的字符n次以上,但尽可能少重复

三:正则表达式补充

\W                        匹配任意不是字母,数字,下划线,汉字的字符

\S                        匹配任意不是空白符的字符

\D                        匹配任意非数字的字符

\B                        匹配不是单词开头或结束的位置

[a]                        匹配单个字符a

[a-z]                匹配a-z小写字母的任意一个

[^a]                        匹配除了a以外的任意字符

[^abc]                匹配除了abc这几个字母以外的任意字符

四:nginx   location 应用规则

Location [=|~|~*|!~|!~*|/] /url/{…}

默认值:no

使用字段:server

Location参数根据URL的不同需求来进行配置,可以使用字符串与正则表达式匹配,

location ~* .*\.jsp$ {

proxy_pass http://tomcat_server;

}

location = / {

# 精确匹配 / ,主机名后面不能带任何字符串

[ configuration A ]

}

location / {

# 因为所有的地址都以 / 开头,所以这条规则将匹配到所有请求

# 但是正则和最长字符串会优先匹配

[ configuration B ]

}

location /documents/ {

# 匹配任何以 /documents/ 开头的地址,匹配符合以后,还要继续往下搜索

# 只有后面的正则表达式没有匹配到时,这一条才会采用这一条

[ configuration C ]

}

location ~ /documents/abc {

# 匹配任何以 /documents/abc 开头的地址,匹配符合以后,还要继续往下搜索

# 只有后面的正则表达式没有匹配到时,这一条才会采用这一条

[ 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 =) > (location 完整路径) > (location ^~ 路径) > (location ~,~* 正则顺序) > (location 部分起始路径) > (/)

 

按照上面的location匹配,分析以下案例:

/ ->config A

精确完全匹配,即使/index.html也匹配不了

/downloads/download.html ->config B

匹配B以后,往下没有任何匹配,采用B

/images/1.gif -> config D

匹配到B,往下匹配到D,停止往下

/images/abc/def ->config D

最长匹配到G,往下匹配D,停止往下

你可以看到 任何以/images/开头的都会匹配到D并停止,FG写在这里是没有任何意义的,H是永远轮不到的,这里只是为了说明匹配顺序

/documents/document.html ->config C

匹配到C,往下没有任何匹配,采用C

/documents/1.jpg -> configuration E

匹配到C,往下正则匹配到E

/documents/abc ->config CC

最长匹配到C,往下正则顺序匹配到CC,往下到E

六:实际使用建议

所以实际使用中,个人觉得至少有三个匹配规则定义,如下:

#直接匹配网站根,通过域名访问网站首页比较频繁,使用这个会加速处理。这里是直接转发给后端应用服务器了,也可以是一个静态首页。

1》:

#第一个必选规则

location = / {

proxy_pass http://tomcat:8080;

}

2》:

#第二个必选规则是处理静态文件请求,这是nginx作为http服务器的强项

#有两种配置模式,目录匹配或后缀匹配,任选其一或搭配使用

Location ^~ /static/ {

Root /usr/local/nginx/html/static/;

}

Location ~* \.(gif | jpg | jpeg | png | css | js | ico)$ {

Root /webroot/res/;

}

3》:

#第三个规则就是通用规则,用来转发动态请求到后端应用服务器,非静态文件请求就默认是动态请求,自己根据实际把握。

#毕竟目前的一些框架的流行,带.php,.jsp后缀的情况很少了

Location / {

proxy_pass http://tomcat:8080;

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

BK_小小关

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值