用docker搭建如下拓扑结构的实验环境。相关代码可以在 https://github.com/dhyuan/dockerEnv/tree/main/nginx 获得。
1) 网路
首先创建一个网络'nginx-net',把所有的相关的容器放在这个网络里以方便容器之间的访问。
这个网络地址范围172.50.0.0/16。相关脚本 createNetwork.sh。
docker network create --subnet=172.50.0.0/16 nginx-net
2) 创建并运行Nginx 容器 'nginxA', 'nginxB', 'nginxC'.
把各容器的IP固定下来防止容器重启后IP变化影响对的日志观察。
Nginx相关配置、日志、html内容都映射到本地,以方便修改。相关脚本 startNginx.sh。
下面是配置nginx容器 nginxA。
docker run --name nginxA \
--network nginx-net --ip 172.50.0.11 \
-v ~/dockerEnv/nginx/nginxA/html:/usr/share/nginx/html:ro \
-v ~/dockerEnv/nginx/nginxA/config/conf.d:/etc/nginx/conf.d \
-v ~/dockerEnv/nginx/nginxA/config/nginx.conf:/etc/nginx/nginx.conf:ro \
-v ~/dockerEnv/nginx/nginxA/log:/var/log/nginx \
-p 18080:9090 \
-d nginx:1.22.0
Nginx镜像不包含ping,curl这样的常用工具,可以自行安装。
docker exec -it nginxA sh
apt-get update
apt-get install iputils-ping curl
3) 创建一个容器作为client
因为nginx容器都在自己的网络nginx-net里,为了方便测试通过创建一个Alpine容器作为客户端环境。Alpine容器以-it交互模式运行。
docker run --name nclient100 --network nginx-net --ip 172.50.0.100 -it alpine:3.16.0
Alpine镜像没有curl命令,可以通过apk安装。
apk add curl
可以在alpine 容器的console发送curl命令进行测试。
curl http://nginxA:9090/testProxy/index.html
curl -H "X-FORWARDED-FOR: 12.3.4.5" http://nginxA:9090/testProxy/index.html
4) Play around
因为ngix容器的配置、日志、html目录都映射到了本地,所以可以本地的这些内容进行测试、验证。
可以根据自己的需要修改nginxA(B|C)/config/confd/9090.conf 里的"location /testProxy"配置块进行nginx相关参数的验证。
查看各容器的IP,可运行 ./showInfo.sh
清除各容器的nginx日志,可运行 ./cleanlog.sh
修改nginx的配置后进行语法检查,可运行 ./testCfg.sh
变更了nginx的配置使之生效,可运行 ./reload.sh
5) 一个小Demo
下图显示了一个测试获取真实用户IP的场景。
为了查看HTTP header里的X_REAL_IP字段,在‘log_format main'里加入了 " | $http_x_real_ip" ,这样在access.log就就可以看到nginx接收到的HEADER X_REAL_IP的值。
从图里 nginxC 的access.log 中可以看到,nginxC收到的X_REAL_IP是ngixA的IP。如果我们希望这里的X_REAL_IP记录的是真正web client的IP就需要把nginxB中的指令 "proxy_set_header X-Real-IP
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有