我是靠谱客的博主 雪白纸飞机,最近开发中收集的这篇文章主要介绍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;

最后

以上就是雪白纸飞机为你收集整理的nginx正则及location匹配的全部内容,希望文章能够帮你解决nginx正则及location匹配所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(51)

评论列表共有 0 条评论

立即
投稿
返回
顶部