简单记录一下测试nginx流量复制功能,为了方便直接使用nginx的docker来做测试
一、拉取nginx镜像
首先拉取nginx:latest镜像,在命令行执行:
1 | docker pull nginx |
响应:
1 | Using default tag: latest |
查看本地镜像:
1 | docker images |
响应:
1 | REPOSITORY TAG IMAGE ID CREATED SIZE |
ok, 镜像拉取成功了
二、启动主nginx并挂载配置
这一步要装docker里的nginx配置挂载出来,以实现配置编辑功能,这一步不是必须的,也可以在启动的容器在修改,只是放在本地目录可以方便以后使用。
以默认的方式运行nginx 镜像:
1 | docker run -p 8080:80 -d nginx |
响应会返回对应的运行容器id(这个是动态生成的,每次执行都不一样):
1 | 8fce9da7d48c796c207cc52c22e6955cb277d72d5b1047dd3e514ea936cb34e8 |
查看支持的实例:
1 | docker ps |
响应:
1 | CONTAINER ID IMAGE COMMAND ... PORTS NAMES |
将容器中的配置文件复制到当前目录:
1 | docker cp 8fce9da7d48c:/etc/nginx . |
停止nginx:
1 | docker stop 8fce9da7d48c |
挂载目录并重新启动:
1 | docker run --rm --name mynginx --volume "$PWD/nginx":/etc/nginx -p 8080:80 -d nginx |
响应:
1 | 962dfc20048e71f179f8fae65a3afa7de049964d73d9decab472b0b7aeb5badf |
在浏览器访问地址:http://127.0.0.1:8080/ 会返回nginx的默认页面,因为我们要测试的是流量转发功能所以对服务没有要求,主要看流量是否转发成功,具体怎么看下边会说明。
三、启动测试复制服务
这里启动两个服务,ng1和ng2 期中ng1为复制源服务即我们真实请求的服务,ng2为复制目标服务,实现的功能是将我们请求ng1的流量复制到ng2上。
启动ng1及ng2:
1 | docker run -d --rm -p 8081:80 --name ng1 nginx |
请求是否到达服务器我们可以通过查看nginx日志的方式获得,分别开户两个终端容器用于查看ng1和ng2的日志:
1 | docker logs -f ng1 |
分别请求本地 http://127.0.0.1:8081 和 http://127.0.0.1:8082 查看终端是否有请求日志打印 如:
1 | 172.17.0.1 - - [19/Nov/2019:11:44:01 +0000] "GET / HTTP/1.1" 304 0 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.97 Safari/537.36" "-" |
日志打印没问题,接下来我们配置nginx的镜像功能,在第二步中我们复制出来的目录中添加我们的配置文件:
1 | vi nginx/conf.d/ixx.conf |
输入以下内容:
1 | upstream ixxsrc{ |
登陆到主nginx容器中并重新reload配置:
1 | docker exec -it mynginx /bin/bash |
然后在浏览器中访问 http://lo:8081
查看终端ng1的日志与终端ng2的日志,会几乎同时打印出请求,说明流量复制成功。
本文链接: http://blog.jisuye.com/2019/11/19/nginx_mirror/
版权声明: 本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。转载请注明出处!