前期准备:
1.两套静态资源文件dist 和 static
2.两个mysql数据库
3.由于项目中使用到了redis缓存,所以也需要两个redis库,此项直接在项目配置文件appcalition.yml中配置
4.利用idea直接打包项目,部署容器,需要注意:1.容器的端口映射,如第一个web项目(以下简称web1)端口范围为8800~8802,第二个web项目(以下简称web2)端口范围为8803~8805;2.文件映射路径.此项主要涉及idea中的Configurations配置
web1配置之一:
需要同时更改application.yml和dockerfile文件中的端口:
web2配置之一:
文件映射地址主要是和项目交互的静态文件(项目中可以上传下载的静态文件)以及项目本身产生的文件/appfile(主要是log日志文件)在宿主机中的映射地址
完成上述准备后可以先部署项目到docker中,让项目先跑起来
重点操作:
主要需要操作的文件为nginx的config文件
一个nginx配置文件可以在http块中配置多个server块用于根据不同端口,或服务名server_name分发资源
不同的server块可以给不同的web应用服务
服务web1的server块:
服务web2的sever块:
关于域名映射:
linux系统在/etc/hosts 文件中配置 例如我的本地配置:192.168.30.100 localtest
windows系统在 c:/windows/system32/drivers/etc/hosts 文件修改 例如我的本地配置:192.168.30.100 localtest
可以看到,web1的server块和web2的server块中nginx的入口端口都是一样的,但是服务名不一样,此处nginx就进行了服务分发,同时因为是不同的web项目,相应的静态资源和分发到的后端服务负载均衡列表也应该不一样,至此单服务器利用nginx配置多个web服务已完成
可以看到下图:两套web的资源是不一样的
nginx代理的工作流程:
部署nginx后nginx应该是web服务器的唯一入口,也就是说在浏览器的地址页输入的内容会先到nginx服务器,根据输入的服务名,也就是域名(域名映射也是域名)或ip地址找到相应的server块,这是第一层的服务分发,然后将请求发送到负载均衡列表中的后端服务器地址,这是第二层的分发.
在上述的第一层和第二层服务分发之间,还可以存在一层,即相同域名不同端口的server,此时nginx同样会先匹配域名,然后看此域名下有无其他端口,匹配完端口后再进行后端服务的负载均衡.