测试所需环境
为了测试反向代理是否成功,需要在服务器中至少创建三个容器,一个容器用于反向代理,两个容器作为站点服务器进行部署,本测试用到的两个站点分别是blog、crm。
本测试在windows 10中安装虚拟机,并预先在虚拟机中安装了CentOS 7的操作系统和docker,这里假设CentOS 7宿主机的IP地址为192.168.86.136。
操作步骤
准备工作,在宿主机中创建几个目录,用于存放反向代理服务器和站点的挂载目录:
cd /usr/local/src/
mkdir -p dockerConfig/{nginxMaster,nginxBlog,nginxCrm}
docker的准备工作,拉取一个nginx镜像,并启动一个测试用的nginx容器:
docker pull nginx:1.17.10
docker run -it --name nginx-test -d nginx:1.17.10
将需要用到的配置文件、html文件等拷贝到宿主机,便于在以后的步骤中进行挂载:
# 拷贝容器内的文件到反向代理服务器宿主机目录
docker cp nginx-test:/etc/nginx/nginx.conf /usr/local/src/dockerConfig/nginxMaster/nginx.conf
docker cp nginx-test:/etc/nginx/conf.d/ /usr/local/src/dockerConfig/nginxMaster/conf.d/
docker cp nginx-test:/usr/share/nginx/html/ /usr/local/src/dockerConfig/nginxMaster/html/
docker cp nginx-test:/var/log/nginx/ /usr/local/src/dockerConfig/nginxMaster/logs
# 拷贝容器内的文件到blog站点宿主机目录
docker cp nginx-test:/etc/nginx/nginx.conf /usr/local/src/dockerConfig/nginxBlog/nginx.conf
docker cp nginx-test:/etc/nginx/conf.d/ /usr/local/src/dockerConfig/nginxBlog/conf.d/
docker cp nginx-test:/usr/share/nginx/html/ /usr/local/src/dockerConfig/nginxBlog/html/
docker cp nginx-test:/var/log/nginx/ /usr/local/src/dockerConfig/nginxBlog/logs
# 拷贝容器内的文件到crm站点宿主机目录
docker cp nginx-test:/etc/nginx/nginx.conf /usr/local/src/dockerConfig/nginxCrm/nginx.conf
docker cp nginx-test:/etc/nginx/conf.d/ /usr/local/src/dockerConfig/nginxCrm/conf.d/
docker cp nginx-test:/usr/share/nginx/html/ /usr/local/src/dockerConfig/nginxCrm/html/
docker cp nginx-test:/var/log/nginx/ /usr/local/src/dockerConfig/nginxCrm/logs
在上一步中,也可以仅从容器中拷贝一份文件到一个宿主机目录,然后直接从宿主机中复制到其他的站点目录即可。测试容器使用完成后,即可删除:
docker container rm -f nginx-test
接下来针对反向代理服务器和各站点创建不同的容器,让其分别挂载宿主机上对应目录的配置文件,在此需要特别留意宿主机与容器之间的端口映射,在后续的配置过程中需要用到。
- 创建反向代理服务器容器
docker run -it \
--name nginx-master \
-p 80:80 \
-v /usr/local/src/dockerConfig/nginxMaster/nginx.conf:/etc/nginx/nginx.conf \
-v /usr/local/src/dockerConfig/nginxMaster/conf.d/:/etc/nginx/conf.d/ \
-v /usr/local/src/dockerConfig/nginxMaster/html/:/usr/share/nginx/html/ \
-v /usr/local/src/dockerConfig/nginxMaster/logs/:/var/log/nginx/ \
-d nginx:1.17.10
- 创建blog站点容器
docker run -it \
--name nginx-blog \
-p 8081:80 \
-v /usr/local/src/dockerConfig/nginxBlog/nginx.conf:/etc/nginx/nginx.conf \
-v /usr/local/src/dockerConfig/nginxBlog/conf.d/:/etc/nginx/conf.d/ \
-v /usr/local/src/dockerConfig/nginxBlog/html/:/usr/share/nginx/html/ \
-v /usr/local/src/dockerConfig/nginxBlog/logs/:/var/log/nginx/ \
-d nginx:1.17.10
- 创建crm站点容器
docker run -it \
--name nginx-crm \
-p 8082:80 \
-v /usr/local/src/dockerConfig/nginxCrm/nginx.conf:/etc/nginx/nginx.conf \
-v /usr/local/src/dockerConfig/nginxCrm/conf.d/:/etc/nginx/conf.d/ \
-v /usr/local/src/dockerConfig/nginxCrm/html/:/usr/share/nginx/html/ \
-v /usr/local/src/dockerConfig/nginxCrm/logs/:/var/log/nginx/ \
-d nginx:1.17.10
修改反向代理服务器配置,使其实现反向代理功能,需要注意宿主机的ip地址和端口号,端口号要跟之前创建容器时分配的端口号相对应:
cd /usr/local/src/dockerConfig/nginxMaster/conf.d/
mv default.conf master.conf
vim master.conf
# 将如下内容替换至master.conf文件中
server {
listen 80;
# blog站点的域名
server_name docker8.blog.localhost.com;
location / {
# 宿主机ip地址:blog容器对应宿主机的端口
proxy_pass http://192.168.86.136:8081/;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}
server {
listen 80;
server_name docker8.crm.localhost.com;
location / {
proxy_pass http://192.168.86.136:8082/;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}
重启反向代理服务器容器,使配置文件生效:
docker container restart nginx-master
修改各站点的站点文件:
- blog站点
cd /usr/local/src/dockerConfig/nginxBlog/html/
vim index.html
# 将如下内容替换至index.html文件中
Hello, Blog!
- crm站点
cd /usr/local/src/dockerConfig/nginxCrm/html/
vim index.html
# 将如下内容替换至index.html文件中
Hello, crm!
修改windows系统中的hosts文件,添加以下两条映射:
192.168.86.136 docker8.blog.localhost.com
192.168.86.136 docker8.crm.localhost.com
至此,所有的配置均已完成,在windows的浏览器中分别访问 docker8.blog.localhost.com 和 docker8.blog.localhost.com ,即可看到页面中的反馈结果是不相同的。
-
访问 docker8.blog.localhost.com 域名时
-
访问 docker8.crm.localhost.com 域名时
扩展
如需在以上环境中新增新的站点,请遵循以下步骤进行操作即可:
- 将现有站点目录拷贝为新的站点目录;
- 创建新的容器,宿主机的挂载点修改为第1步中创建的对应目录;
- 在反向代理服务器的配置文件master.conf中新增一个server,修改需要的域名,端口请填写上一步中创建新容器时指定的宿主机的端口;
- 重启反向代理服务器容器;
- 在windows系统的hosts文件中新增域名和宿主机ip地址的映射关系;
同样,通过修改 master.conf 文件,也可以将反向代理的地址指向到其他的宿主机ip地址,以达到通过同一台反向代理服务器,访问多台宿主机中部署的站点的目的。