反向代理
反向代理演示案例预备条件
-
准备两个tomcat的服务器。
这里我们在同一台Linux服务器上运行两个tomcat分别为8080和8081端口。(关于tomcat的准备这里不在过多介绍,可以自行网上搜索)。 -
在8080端口的tomcat的webapps路径下。
创建一个dev文件夹并创建一个a.html的文件。文件内容如下。
<html>
<h1>tomcat 8080 dev</h1>
</html>
- 同样我们在8080端口的tomcat的webapps路径下。
创建一个prd文件夹并创建一个a.html的文件。文件内容如下。
<html>
<h1>tomcat 8081 prd</h1>
</html>
- 分别启动两台tomcat服务器。
分别访问一下地址,我们会看到一下结果。
-
http://192.168.8.108:8080/dev/a.html
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4IlUMVdS-1620707202179)(imgs/nginx-re-proxy01.PNG)] -
http://192.168.8.108:8081/prd/a.html
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7tDZLfbb-1620707202183)(imgs/nginx-re-proxy03.PNG)]
实战——配置反向代理虚拟主机
现在我们来配置一个反向代理8080服务器的虚拟主机。
- 我们在http的属性中,新增一个server如下所示:
server {
listen 80;
server_name 192.168.8.108;
location / {
proxy_pass http://127.0.0.1:8080;
}
}
各个属性的含义如下:
- server是新增虚拟主机的属性。
- listen表示当前虚拟主机的监听端口,即为80。
- server_name请求域名可以有多个,用空格隔开。需要注意的是server_name的匹配规则是:先遍历所有配置的server_name,如果找到了,则执行对应的server,如果没有找到,则默认执行第一个server。
我们这里就使用ip地址作为域名了。 - location请求的细分处理,本章后再详细演示。
- proxy_pass被代理服务器路径。
- 测试效果
通过上面的配置,通过监听80的端口和192.168.8.108域名来反向代理了8080的tomcat服务器。
现在我们将http://192.168.8.108:8080/dev/a.html地址的端口换成80访问。
会发现,同样可以得到之前的访问内容。证明我们的反向代理是成功的。
(注意:80端口是HTTP的默认端口,浏览器一般会自动省略。)
使用location的规则匹配
location匹配规则说明
- = /uri
【=】表示精确匹配,只有完全匹配上才能生效 - ^~ /uri
【^~】开头对URL路径进行前缀匹配,并且在正则之前。 - ~ pattern
【~】开头表示区分大小写的正则匹配 - ~* patter
【~*】开头表示不区分大小写的正则匹配 - /uri
【/uri】不带任何修饰符,也表示前缀匹配,但是在正则匹配之后 - /
【/】通用匹配,任何未匹配到其它location的请求都会匹配到,相当于switch中的default
实战——匹配location规则
- 配置匹配规则
通过【~】规则,将dev和prd的访问分别代理到8080和8081上去。
其他的属性和之前一样,我们这里再在http属性中新增一个server虚拟主机。
server {
listen 9000;
server_name 192.168.8.108;
location ~/dev/ {
proxy_pass http://127.0.0.1:8080;
}
location ~/prd/ {
proxy_pass http://127.0.0.1:8081;
}
}
- 测试效果
重启nginx之后将http://192.168.8.108:8080/dev/a.html和http://192.168.8.108:8081/prd/a.html地址的端口全部换成9000。
然后在访问,我们可以发现dev访问的是8080,prd访问的是8081。
小结
- 虚拟主机反向代理配置server、listen、server_name、location、proxy_pass
- location匹配规则