0. 引言
咱们上节讲解了nginx的负载均衡配置,但是还有很多其他的转发情况,包括不同路径转发至不同的业务服务,通配符识别路径转发等。
今天一起来学习nginx的转发配置
1. location模块的匹配模式
首先我们要了解nginx进行转发代理的核心在于两处,一是入口,二是出口;入口就是url路径匹配识别对应的路径,出口就是转发映射对应的后台服务地址
我们的入口路径匹配识别都是在location
模块实现的,所以我们要首先认识location支持的匹配模式。
所谓匹配模式,就是根据什么样的路径进行匹配,比如识别到路径以“/user”开头的,则转发至user-server服务,那么“/user”就是我们的匹配路径
location支持2种匹配模式:精确匹配(普通匹配)和模糊匹配(正则匹配),总共以下几种呈现形式:
- 1、全路径精确匹配 =
进行uri的全路径精确匹配,要匹配的一模一样的uri
比如 location = /index ,那么只有路径为/index的才会匹配到
- 2、前缀模糊匹配 ^~
进行uri的前缀精确匹配
比如 location ^~ /user/ ,那么只要是路径以/user/开头的都会匹配到
- 3、无匹配符号的精确匹配
没有符号,按照路径开头精确匹配,但是匹配到后不会立即返回,还会继续匹配其他普通匹配,如果匹配到,则会舍弃之前匹配的路径
比如 location /user/ , 当访问/user/开头时会匹配到
比如 location /user/admin,当访问/user/admin时会匹配到
- 4、模糊匹配 ~
进行uri的模糊匹配,区分大小写,匹配到后不再进行其他匹配
比如 location ~ /user/ ,当路径包含/user/时会匹配,比如/admin/user/或者/user/admin/
当然也可以用正则表达式来表示匹配路径:
比如 location ~ ^/user(.*)admin$,能够匹配以/user开头,admin结尾的路径,.*
表示的是任意字符
这里我们简单测试一下,配置后我们访问192.168.244.41/user/xxx/admin
,发现是可以正常转发至后台的tomcat服务的,只是tomcat服务中没有/user地址的接口,所以返回404
我们继续访问192.168.244.41/user/xxx
,发现报的就是nginx的404了,这说明请求并没有转发到后台tomcat中,说明没有命中匹配。
- 5、模糊匹配 ~*
进行uri的模糊匹配,不区分大小写,匹配到后不再进行其他匹配,优先级与~相同,按照先后顺序优先
比如 location ~ /USER/,当路径包含/USER/时会匹配,如果是/user/则不会,因为区分大小写了
优先级:
由高到低:=
> ^~
> 其他,其他匹配根据先后顺序,配置在前的越优先
2. proxy_pass配置详解
我们上述讲解了匹配模式的书写,匹配到了还要进行合理的转发,而转发模式的控制就是通过proxy_pass
, 下面我们来看看proxy_pass的语法结构
2.1 proxy_pass 的四种配置写法
首先我们来回顾下proxy_pass的语法:
proxy_pass url;
转发地址url分为带/
和不带/
,带杠的为绝对根路径,会直接在路径后拼接上不带匹配路径的转发地址;如果没有杠表示相对路径,则会将匹配路径也带上进行转发,我们举例说明:
location /user/ {
proxy_pass url;
}
访问路径固定为:http://192.168.244.21/user/index.html
- 1、当
proxy_pass http://192.168.244.21:8080/
时
会跳转至http://192.168.244.21:8080/index.html,带
/
表示绝对路径,匹配路径/user/会被消除
- 2、当
proxy_pass http://192.168.244.21:8080
时
会跳转至http://192.168.244.21:8080/user/index.html,相对路径,匹配路径/user/不会被消除
- 3、当
proxy_pass http://192.168.244.21:8080/admin/
时
会跳转至http://192.168.244.21:8080/admin/index.html,匹配路径/user/被消除,并且保留转发路径里的/admin/
- 4、当
proxy_pass http://192.168.244.21:8080/admin
时
会跳转至http://192.168.244.21:8080/adminindex.html,因为proxy_pass中也包含了
/
了,表示绝对路径,所以/user/会被消除
总言之记住一点,带/
表示绝对路径,请求路径中的匹配路径(location)转发时会被消除
2.2 server和location模块中proxy_pass的区别
最后的话
最近很多小伙伴找我要Linux学习资料,于是我翻箱倒柜,整理了一些优质资源,涵盖视频、电子书、PPT等共享给大家!
资料预览
给大家整理的视频资料:
给大家整理的电子书资料:
如果本文对你有帮助,欢迎点赞、收藏、转发给朋友,让我有持续创作的动力!
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!