前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >用docker在本地搭建nginx实验环境

用docker在本地搭建nginx实验环境

作者头像
dhyuan
发布2022-05-30 14:31:53
5900
发布2022-05-30 14:31:53
举报
文章被收录于专栏:响应式编程响应式编程

用docker搭建如下拓扑结构的实验环境。相关代码可以在 https://github.com/dhyuan/dockerEnv/tree/main/nginx 获得。

1) 网路

首先创建一个网络'nginx-net',把所有的相关的容器放在这个网络里以方便容器之间的访问。

这个网络地址范围172.50.0.0/16。相关脚本 createNetwork.sh。

代码语言:javascript
复制
docker network create --subnet=172.50.0.0/16 nginx-net

2) 创建并运行Nginx 容器 'nginxA', 'nginxB', 'nginxC'.

把各容器的IP固定下来防止容器重启后IP变化影响对的日志观察。

Nginx相关配置、日志、html内容都映射到本地,以方便修改。相关脚本 startNginx.sh。

下面是配置nginx容器 nginxA。

代码语言:javascript
复制
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这样的常用工具,可以自行安装。

代码语言:javascript
复制
docker exec -it nginxA sh
apt-get update
apt-get install iputils-ping curl

3) 创建一个容器作为client

因为nginx容器都在自己的网络nginx-net里,为了方便测试通过创建一个Alpine容器作为客户端环境。Alpine容器以-it交互模式运行。

代码语言:javascript
复制
docker run --name nclient100 --network nginx-net --ip 172.50.0.100 -it alpine:3.16.0

Alpine镜像没有curl命令,可以通过apk安装。

代码语言:javascript
复制
apk add curl

可以在alpine 容器的console发送curl命令进行测试。

代码语言:javascript
复制
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

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-05-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 响应式编程 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
命令行工具
腾讯云命令行工具 TCCLI 是管理腾讯云资源的统一工具。使用腾讯云命令行工具,您可以快速调用腾讯云 API 来管理您的腾讯云资源。此外,您还可以基于腾讯云的命令行工具来做自动化和脚本处理,以更多样的方式进行组合和重用。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档