简单记录一下测试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 国际许可协议 进行许可。转载请注明出处!