单个服务器内利用docker部署多个web项目(使用nginx代理)

1,164 阅读2分钟

前期准备:

1.两套静态资源文件dist 和 static

image.png 2.两个mysql数据库

3.由于项目中使用到了redis缓存,所以也需要两个redis库,此项直接在项目配置文件appcalition.yml中配置

image.png

4.利用idea直接打包项目,部署容器,需要注意:1.容器的端口映射,如第一个web项目(以下简称web1)端口范围为8800~8802,第二个web项目(以下简称web2)端口范围为8803~8805;2.文件映射路径.此项主要涉及idea中的Configurations配置

web1配置之一:

image.png

需要同时更改application.yml和dockerfile文件中的端口:

image.png

image.png

web2配置之一:

image.png

image.png

image.png

文件映射地址主要是和项目交互的静态文件(项目中可以上传下载的静态文件)以及项目本身产生的文件/appfile(主要是log日志文件)在宿主机中的映射地址

image.png

完成上述准备后可以先部署项目到docker中,让项目先跑起来

重点操作:

主要需要操作的文件为nginx的config文件

一个nginx配置文件可以在http块中配置多个server块用于根据不同端口,或服务名server_name分发资源

不同的server块可以给不同的web应用服务

服务web1的server块:

image.png 服务web2的sever块:

image.png 关于域名映射:

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的资源是不一样的

image.png

image.png

nginx代理的工作流程:

部署nginx后nginx应该是web服务器的唯一入口,也就是说在浏览器的地址页输入的内容会先到nginx服务器,根据输入的服务名,也就是域名(域名映射也是域名)或ip地址找到相应的server块,这是第一层的服务分发,然后将请求发送到负载均衡列表中的后端服务器地址,这是第二层的分发.

在上述的第一层和第二层服务分发之间,还可以存在一层,即相同域名不同端口的server,此时nginx同样会先匹配域名,然后看此域名下有无其他端口,匹配完端口后再进行后端服务的负载均衡.