经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 数据库/运维 » Nginx » 查看文章
Nginx反向代理负载均衡的容器化部署
来源:cnblogs  作者:平也  时间:2019/6/27 9:18:02  对本文有异议

首先,在home目录创建microservices目录,开启第一篇章。

  1. cd ~ && mkdir microservices && cd microservices

创建nginx目录,在目录下分别创建三个节点目录:nginx01nginx02nginx03,目的是使nginx01作为反向代理服务器,将请求均衡转发到nginx02nginx03

  1. mkdir -p ./nginx/nginx01 ./nginx/nginx02 ./nginx/nginx03

展示效果如下所示。

  1. nginx
  2. ├── nginx01
  3. └── nginx02
  4. └── nginx03

将nginx镜像中的配置文件拷贝到各子目录中,以便做挂载,方法是创建一个临时容器,将配置文件拷贝至宿主机目录,再删除临时容器。

  1. docker run --name tmpnginx -d nginx:latest
  2. docker cp tmpnginx:/etc/nginx/nginx.conf ~/microservices/nginx/nginx01
  3. docker cp tmpnginx:/etc/nginx/nginx.conf ~/microservices/nginx/nginx02
  4. docker cp tmpnginx:/etc/nginx/nginx.conf ~/microservices/nginx/nginx03
  5. docker cp tmpnginx:/etc/nginx/conf.d ~/microservices/nginx/nginx01
  6. docker cp tmpnginx:/etc/nginx/conf.d ~/microservices/nginx/nginx02
  7. docker cp tmpnginx:/etc/nginx/conf.d ~/microservices/nginx/nginx03
  8. docker rm -f tmpnginx

此时nginx目录如下所示。

  1. nginx
  2. ├── nginx01
  3. │?? ├── conf.d
  4. │?? │?? └── default.conf
  5. │?? └── nginx.conf
  6. ├── nginx02
  7. │?? ├── conf.d
  8. │?? │?? └── default.conf
  9. │?? └── nginx.conf
  10. └── nginx03
  11. ├── conf.d
  12. │?? └── default.conf
  13. └── nginx.conf

在根目录创建文件docker-compose.yml,创建三个web服务,配置文件分别映射到容器中的对应文件。

  1. version: '3'
  2. services:
  3. web01: #服务名称
  4. image: nginx:latest #镜像
  5. container_name: web01 #容器名称
  6. ports: #映射端口号,前者宿主机端口,后者容器端口
  7. - 8080:80
  8. volumes: #映射的目录或文件,前者宿主机目录,后者容器目录
  9. - ./nginx/nginx01/nginx.conf:/etc/nginx/nginx.conf #配置文件
  10. - ./nginx/nginx01/conf.d:/etc/nginx/conf.d #扩展配置目录
  11. - ./nginx/html:/usr/share/nginx/html #html存放目录
  12. web02:
  13. image: nginx:latest
  14. container_name: web02
  15. volumes:
  16. - ./nginx/nginx02/nginx.conf:/etc/nginx/nginx.conf
  17. - ./nginx/nginx02/conf.d:/etc/nginx/conf.d
  18. - ./nginx/html:/usr/share/nginx/html
  19. web03:
  20. image: nginx:latest
  21. container_name: web03
  22. volumes:
  23. - ./nginx/nginx03/nginx.conf:/etc/nginx/nginx.conf
  24. - ./nginx/nginx03/conf.d:/etc/nginx/conf.d
  25. - ./nginx/html:/usr/share/nginx/html

打开nginx/nginx01/conf.d/default.conf,在文章顶部加入upstream配置,web02与web03是docker-compose.yml中定义的容器名称container_name

  1. upstream backend {
  2. server web02:80;
  3. server web03:80;
  4. }

location /中加入proxy_pass以便将请求转发给backend

  1. location / {
  2. root /usr/share/nginx/html;
  3. index index.html index.htm;
  4. proxy_pass http://backend; #追加该行
  5. }

配置完成后,执行以下命令将容器跑起来。

  1. cd ~/microservices
  2. docker-compose up

提示以下内容即成功。

  1. Recreating microservices_web01_1 ... done
  2. Recreating microservices_web02_1 ... done
  3. Recreating microservices_web03_1 ... done
  4. Attaching to web02, web01, web03

此时microservices目录结构如下,nginx目录下多出了一个html文件夹,可以在html目录下创建一个index.html,输入Hello world!,重新跑一下。

  1. microservices
  2. ├── docker-compose.yml
  3. └── nginx
  4. ├── html
  5. │?? └── index.html
  6. ├── nginx01
  7. │?? ├── conf.d
  8. │?? │?? └── default.conf
  9. │?? └── nginx.conf
  10. ├── nginx02
  11. │?? ├── conf.d
  12. │?? │?? └── default.conf
  13. │?? └── nginx.conf
  14. └── nginx03
  15. ├── conf.d
  16. │?? └── default.conf
  17. └── nginx.conf

现在做个测试,在浏览器中访问localhost:8080,观察终端打印的日志。

  1. web01 | 172.24.0.1 - - [26/Jun/2019:01:48:28 +0000] "GET / HTTP/1.1" 304 0 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36" "-"
  2. web02 | 172.24.0.2 - - [26/Jun/2019:01:48:28 +0000] "GET / HTTP/1.0" 304 0 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36" "-"

上述内容表示本次请求通过web01转发到了web02。

  1. web01 | 172.24.0.1 - - [26/Jun/2019:04:42:36 +0000] "GET / HTTP/1.1" 304 0 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36" "-"
  2. web03 | 172.24.0.2 - - [26/Jun/2019:04:42:36 +0000] "GET / HTTP/1.0" 304 0 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36" "-"

再次刷新,可以看到请求通过web01转发到了web03,到目前为止,基本的负载均衡部署就已经完成了,上述的web01是将请求均衡转发到web02、web03的,这种方法叫轮询法,下篇文章介绍几种其他的负载算法。

原文链接:http://www.cnblogs.com/enochzzg/p/11089260.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号