基于docker+nginx反向代理部署多站点

测试所需环境

为了测试反向代理是否成功,需要在服务器中至少创建三个容器,一个容器用于反向代理,两个容器作为站点服务器进行部署,本测试用到的两个站点分别是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

接下来针对反向代理服务器和各站点创建不同的容器,让其分别挂载宿主机上对应目录的配置文件,在此需要特别留意宿主机与容器之间的端口映射,在后续的配置过程中需要用到。

  1. 创建反向代理服务器容器
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 
  1. 创建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 
  1. 创建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

修改各站点的站点文件:

  1. blog站点
cd /usr/local/src/dockerConfig/nginxBlog/html/
vim index.html

# 将如下内容替换至index.html文件中
<h1>Hello, Blog!</h1>
  1. crm站点
cd /usr/local/src/dockerConfig/nginxCrm/html/
vim index.html

# 将如下内容替换至index.html文件中
<h1>Hello, crm!</h1>

修改windows系统中的hosts文件,添加以下两条映射:

192.168.86.136  docker8.blog.localhost.com
192.168.86.136  docker8.crm.localhost.com

至此,所有的配置均已完成,在windows的浏览器中分别访问 docker8.blog.localhost.comdocker8.blog.localhost.com ,即可看到页面中的反馈结果是不相同的。

  1. 访问 docker8.blog.localhost.com 域名时

    blog

  2. 访问 docker8.crm.localhost.com 域名时

    crm

扩展

如需在以上环境中新增新的站点,请遵循以下步骤进行操作即可:

  1. 将现有站点目录拷贝为新的站点目录;
  2. 创建新的容器,宿主机的挂载点修改为第1步中创建的对应目录;
  3. 在反向代理服务器的配置文件master.conf中新增一个server,修改需要的域名,端口请填写上一步中创建新容器时指定的宿主机的端口;
  4. 重启反向代理服务器容器;
  5. 在windows系统的hosts文件中新增域名和宿主机ip地址的映射关系;

同样,通过修改 master.conf 文件,也可以将反向代理的地址指向到其他的宿主机ip地址,以达到通过同一台反向代理服务器,访问多台宿主机中部署的站点的目的。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,732评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,496评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,264评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,807评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,806评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,675评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,029评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,683评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,704评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,666评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,773评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,413评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,016评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,978评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,204评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,083评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,503评论 2 343