1、案例一(通过Nginx转发到Tomcat)
(1)准备
在docker中安装tomcat和nginx
(2)具体配置
在windows系统的host文件进行域名和ip对应关系的配置
添加内容到host文件:
测试:因为已经在host文件中配置了IP的对应关系,访问了www.123.com就相当于虚拟机的IP,能够通过www.123.com访问成功就证明host的文件已经生效
(3)在Nginx中进行反向代理的配置
servler_name是虚拟机的IP,proxy_pass是要转发到的虚拟机的位置
(4)访问[www.123.com:80]进行测试
浏览器访问的是nginx的地址,但是最终访问到的是tomcat的内容
如果访问不到可以尝试关闭防火墙,在实际的开发中不能采用关闭防火墙的方式,只能增加开放的端口
访问的过程如下:
2、案例二
(1)先搭建两个tomcat容器
先利用两个docker镜像分别创建两个不同的tomcat容器,因为是两个tomcat容器运行在一台linux操作系统上,为了避免端口号的冲突,将其中一个容器的tomcat的server.xml配置的端口号进行修改
[root@aubin ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES aca9d39cf381 tomcat:8.5.32 "catalina.sh run" 29 minutes ago Up 29 minutes 0.0.0.0:8081->8080/tcp elegant_rhodes 351cbfd44713 tomcat:latest "catalina.sh run" 30 minutes ago Up 30 minutes 0.0.0.0:8080->8080/tcp epic_saha
一共启动了两个容器,一个是最新版本的镜像创建的,另一个是8.5.32版本的tomcat
(2)在容器中创建页面并测试
- 在新版本的tomcat容器中创建页面:
"index.html" [New File] 0,0-1 All <h1>1</h1> ~
访问:
在8版本的tomcat容器中创建页面:
"index.html" [New File]c <h1>8</h1>
测试:
(3)配置nginx
(4)开放对外访问的端口号
(5)重新加载nginx
root@977929cadeb4:/etc/nginx/conf.d# nginx -s reload 2020/10/29 08:19:52 [notice] 38#38: signal process started
(6)测试
edu:
zhai:
访问:
访问后:
浏览器中输入的是80端口,也就是说刚开始先访问的是Nginx,在Nginx内部再根据edu和zhai的不同,分别重定向到不同的tomcat中
3、总结
= :用于不含正则表达式的 uri 前,要求请求字符串与 uri 严格匹配,如果匹配成功,就停止继续向下搜索并立即处理该请求。
~:用于表示 uri 包含正则表达式,并且区分大小写。
~*:用于表示 uri 包含正则表达式,并且不区分大小写。
^~:用于不含正则表达式的 uri 前,要求 Nginx 服务器找到标识 uri 和请求字符串匹配度最高的 location 后,立即使用此 location 处理请求,而不再使用 location块中的正则 uri 和请求字符串做匹配。