我们上述讲解了匹配模式的书写,匹配到了还要进行合理的转发,而转发模式的控制就是通过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的区别
在server模块中的proxy_pass只需要配置ip(或域名)和端口,相当于端口转发;而在location中的proxy_pass,也就是我们更加常用的,可以配置域名、ip、端口、uri,此外还需要提供协议:http或https,相当于地址转发。
配置语法如下:
server {
listen 80;
proxy_responses 1;
proxy_timeout 20s;
proxy_pass xxx.com:8080;
# proxy_pass 192.168.244.21:8080;
location /user/ {
proxy_pass http://192.168.244.21:8081;
}
}
3. location匹配案例练习
- 1、匹配匹配以
.jsp
结尾的路径,将其转发至端口为8080的tomcat服务
解析:要匹配以.jsp
结尾,只需要默认写上.jsp
即可,但是需要注意.
是单一字符通配符,所以要添加\
做转义,才能表示成本身点的含义
server {
listen 81;
location ~ (.*)\.jsp {
proxy_pass http://localhost:8080;
proxy_set_header HOST $host;
proxy_http_version 1.1;
}
}
测试:
访问ip:81/index.jsp
,可以看到成功转发到8080端口的tomcat了(这里提前修改了首页,将端口显示在tomcat首页了)
去除点号访问,发现访问不通了,测试通过
- 2、三台不同的tomcat,端口分别为8080,8081,8083,分别承担不同的业务,将路径以/user开头的请求转发至tomcat 8080, 以/order开头的转发至tomcat 8081, 路径包含/product跳转到tomcat 8083的首页
解析:
该需求实际上一共有两部分,/user,/order的配置都类似,我们使用^~
即可,只有8083的需要用到的是跳转,也就是重定向到tomcat 8083首页,这里需要用到return
,大家暂时知道即可,下一章我们详细讲解重定向的配置。
server {
listen 81;
location ^~ /user {
proxy_pass http://localhost:8080/;
proxy_set_header HOST $host;
proxy_http_version 1.1;
}
location ^~ /order {
proxy_pass http://localhost:8081/;
proxy_set_header HOST $host;
proxy_http_version 1.1;
}
location ~* /product {
return http://192.168.244.41:8083/index.jsp;
}
}
测试:
1、访问/order/index.jsp
, /user/index.jsp
都成功转发对应服务
2、访问/product/xxx
,也成功跳转到tomcat 8083首页了,测试通过。
最后的话
最近很多小伙伴找我要Linux学习资料,于是我翻箱倒柜,整理了一些优质资源,涵盖视频、电子书、PPT等共享给大家!
资料预览
给大家整理的视频资料:
给大家整理的电子书资料:
如果本文对你有帮助,欢迎点赞、收藏、转发给朋友,让我有持续创作的动力!
加入社区》https://bbs.csdn.net/forums/4304bb5a486d4c3ab8389e65ecb71ac0
wzwJo-1725724440870)]
给大家整理的电子书资料:
[外链图片转存中…(img-rBxWWsiY-1725724440871)]
如果本文对你有帮助,欢迎点赞、收藏、转发给朋友,让我有持续创作的动力!
加入社区》https://bbs.csdn.net/forums/4304bb5a486d4c3ab8389e65ecb71ac0