本文演示 Nginx 的反向代理基础设置。 在演示中,使用在了在 在Docker中使用 Nginx 服务器 中构建好的 Nginx 镜像作为反向代理服务和 将 Web 应用部署到运行在 Docker 中的 Tomcat 构建好的 Java web 应用镜像作为后端服务,应用 docker 和 docker-compose 简化了环境的搭建。
在本次演示中,我们先演示一个最简单的反向代理环境: 一台运行在 Tomcat 中的 Java Web 应用作为后端服务,因为我们使用了 docker 运行,所以该服务会运行在 Docker 的虚拟网络中,不具备外网地址,如果我们不配置端口映射,该服务也服务通过宿主机镜进行访问,这样就模拟了后端服务不能从外部进行访问的情况;然后再用一台运行 Nginx 的服务作为反向代理服务器,通过配置将所有的访问路由到后端的 Java Web 服务中。
Nginx 配置文件
在我们使用的 Nginx 镜像中,默认的站点配置文件放置在镜像的 /etc/nginx/conf.d/default.conf 中,因此构建一个名为 default.conf 的文件,内容如下:
1 | server { |
可以看到,我们使用 proxy_pass 指令将对默认”/“的访问全部路由到了后端服务的 8080 端口。
Docker-Compose 文件
在 default.conf 文件所在的目录中在新建一个名为: docker-compose.yml 文件。内容如下:
1 | version: '2' |
可以看到:
- 我们将后端服务运行的容器名为为 app1, 然后使用 docker 虚拟网络的 dns 进行解析,这样在 proxy_pass 指令中就可以直接使用 app1 作为后端服务的主机名。
- 为了使 proxy 能被外访问,我们映射了 80 端口
- 为了使 proxy 容器与 app1 能相互访问,我们使用了 links 指令连接两个容器
- 因为 proxy_pass 指令解析时需要访问 app1, 因此 app1 容器必须在 proxy 容器之前启动发,我们使用 depends_on 指令来解决这个问题。
运行演示
以上文件都准备好以后,可以在同目录(docker-compose.yml 所在目录)中执行
1 | docker-compose up -d |
已启动两个关联的容器。
启动成功后,就可以在浏览器中访问:
1 | http://localhost:8080/hello-servelt-1.0 |
查看返回的结果了。