Nginx反向代理负载均衡的容器化部署
首先,在home目录创建microservices目录,开启第一篇章。
cd ~ && mkdir microservices && cd microservices
创建nginx目录,在目录下分别创建三个节点目录:nginx01、nginx02、nginx03,目的是使nginx01作为反向代理服务器,将请求均衡转发到nginx02、nginx03。
mkdir -p ./nginx/nginx01 ./nginx/nginx02 ./nginx/nginx03
展示效果如下所示。
nginx
├── nginx01
└── nginx02
└── nginx03
将nginx镜像中的配置文件拷贝到各子目录中,以便做挂载,方法是创建一个临时容器,将配置文件拷贝至宿主机目录,再删除临时容器。
docker run --name tmpnginx -d nginx:latest
docker cp tmpnginx:/etc/nginx/nginx.conf ~/microservices/nginx/nginx01
docker cp tmpnginx:/etc/nginx/nginx.conf ~/microservices/nginx/nginx02
docker cp tmpnginx:/etc/nginx/nginx.conf ~/microservices/nginx/nginx03
docker cp tmpnginx:/etc/nginx/conf.d ~/microservices/nginx/nginx01
docker cp tmpnginx:/etc/nginx/conf.d ~/microservices/nginx/nginx02
docker cp tmpnginx:/etc/nginx/conf.d ~/microservices/nginx/nginx03
docker rm -f tmpnginx
此时nginx目录如下所示。
nginx
├── nginx01
│ ├── conf.d
│ │ └── default.conf
│ └── nginx.conf
├── nginx02
│ ├── conf.d
│ │ └── default.conf
│ └── nginx.conf
└── nginx03
├── conf.d
│ └── default.conf
└── nginx.conf
在根目录创建文件docker-compose.yml,创建三个web服务,配置文件分别映射到容器中的对应文件。
version: '3'
services:
web01: #服务名称
image: nginx:latest #镜像
container_name: web01 #容器名称
ports: #映射端口号,前者宿主机端口,后者容器端口
- 8080:80
volumes: #映射的目录或文件,前者宿主机目录,后者容器目录
- ./nginx/nginx01/nginx.conf:/etc/nginx/nginx.conf #配置文件
- ./nginx/nginx01/conf.d:/etc/nginx/conf.d #扩展配置目录
- ./nginx/html:/usr/share/nginx/html #html存放目录
web02:
image: nginx:latest
container_name: web02
volumes:
- ./nginx/nginx02/nginx.conf:/etc/nginx/nginx.conf
- ./nginx/nginx02/conf.d:/etc/nginx/conf.d
- ./nginx/html:/usr/share/nginx/html
web03:
image: nginx:latest
container_name: web03
volumes:
- ./nginx/nginx03/nginx.conf:/etc/nginx/nginx.conf
- ./nginx/nginx03/conf.d:/etc/nginx/conf.d
- ./nginx/html:/usr/share/nginx/html
打开nginx/nginx01/conf.d/default.conf,在文章顶部加入upstream配置,web02与web03是docker-compose.yml中定义的容器名称container_name。
upstream backend {
server web02:80;
server web03:80;
}
在location /中加入proxy_pass以便将请求转发给backend。
location / {
root /usr/share/nginx/html;
index index.html index.htm;
proxy_pass http://backend; #追加该行
}
配置完成后,执行以下命令将容器跑起来。
cd ~/microservices
docker-compose up
提示以下内容即成功。
Recreating microservices_web01_1 ... done
Recreating microservices_web02_1 ... done
Recreating microservices_web03_1 ... done
Attaching to web02, web01, web03
此时microservices目录结构如下,nginx目录下多出了一个html文件夹,可以在html目录下创建一个index.html,输入Hello world!,重新跑一下。
microservices
├── docker-compose.yml
└── nginx
├── html
│ └── index.html
├── nginx01
│ ├── conf.d
│ │ └── default.conf
│ └── nginx.conf
├── nginx02
│ ├── conf.d
│ │ └── default.conf
│ └── nginx.conf
└── nginx03
├── conf.d
│ └── default.conf
└── nginx.conf
现在做个测试,在浏览器中访问localhost:8080,观察终端打印的日志。
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" "-"
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。
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" "-"
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的,这种方法叫轮询法,下篇文章介绍几种其他的负载算法。
Nginx反向代理负载均衡的容器化部署的更多相关文章
- Nginx 反向代理 负载均衡 虚拟主机配置
Nginx 反向代理 负载均衡 虚拟主机配置 通过本章你将学会利用Nginx配置多台虚拟主机,清楚代理服务器的作用,区分正向代理和反向代理的区别,搭建使用Nginx反向搭理和负载均衡,了解Nginx常 ...
- Nginx 反向代理 负载均衡 虚拟主机
Nginx 反向代理 负载均衡 虚拟主机配置 通过本章你将学会利用Nginx配置多台虚拟主机,清楚代理服务器的作用,区分正向代理和反向代理的区别,搭建使用Nginx反向搭理和负载均衡,了解Nginx常 ...
- 十.nginx反向代理负载均衡服务实践部署
期中集群架构-第十章-nginx反向代理负载均衡章节章节====================================================================== 0 ...
- 【转】Nginx 反向代理 负载均衡 虚拟主机配置
原文:http://www.cnblogs.com/itdragon/p/8059000.html Nginx 反向代理 负载均衡 虚拟主机配置 通过本章你将学会利用Nginx配置多台虚拟主机,清楚代 ...
- Centos7.4 Nginx反向代理+负载均衡配置
Ningx是一款高性能的HTTP和反向代理服务器,配置起来也比较简单. 测试环境: 172.16.65.190 Nginx-反向代理 172.16.65.191 Ningx-Web 172.16.65 ...
- 如何使用Weave以及Docker搭建Nginx反向代理/负载均衡服务器
Hi, 今天我们将会学习如何使用 Weave 和 Docker 搭建 Nginx 的反向代理/负载均衡服务器.Weave 可以创建一个虚拟网络将 Docker 容器彼此连接在一起,支持跨主机部署及自动 ...
- 项目实战2.2—nginx 反向代理负载均衡、动静分离和缓存的实现
实验一:实现反向代理负载均衡且动静分离 1.环境准备: 机器名称 IP配置 服务角色 备注 nginx VIP:172.17.11.11 反向代理服务器 开启代理功能 设置监控,调度 rs01 RIP ...
- 项目实战2.1—nginx 反向代理负载均衡、动静分离和缓存的实现
总项目流程图,详见 http://www.cnblogs.com/along21/p/8000812.html 实验一:实现反向代理负载均衡且动静分离 1.环境准备: 机器名称 IP配置 服务角色 备 ...
- 项目实战02:nginx 反向代理负载均衡、动静分离和缓存的实现
目录 实验一:实现反向代理负载均衡且动静分离 1.环境准备: 2.下载编译安装tengine 3.设置代理服务器的配置文件 4.启动tengine服务 5.开启后端的web服务 6.测试 实验二:ng ...
随机推荐
- VC和matlab混合开发遇到的问题及其解决办法
作者:朱金灿 来源:http://blog.csdn.net/clever101 1. error C2011: '_INTERFACE_INFO' : 'struct' type redefinit ...
- C++ Primer章课后编程问题
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZ3V1Z2xlMjAxMA==/font/5a6L5L2T/fontsize/400/fill/I0JBQk ...
- 静态资源命名的注意点以及document.write与innerHTML的区别
今天拿出了去年刚开始学前端的那本书来看,发现好多新东西. 使用下划线和混合大小写不利于SEO! document.write与innerHTML的区别 这个问题大概是初学前端的人才会问的吧,业务代码中 ...
- CSRF的攻击与防御
CSRF(Cross-site request forgery)跨站请求伪造,也被称为“One Click Attack”或者Session Riding,通常缩写为CSRF或者XSRF,是一种对网站 ...
- C#List实现行转列
List实现行转列的通用方案 最近在做报表统计方面的需求,涉及到行转列报表.根据以往经验使用SQL可以比较容易完成,这次决定挑战一下直接通过代码方式完成行转列.期间遇到几个问题和用到的新知识这里整理记 ...
- Fast-tracking approach for building routing topologies in fast-moving networks
In one embodiment, a local node in a communication network determines a set of its neighbor nodes, a ...
- Javascript中的类实现
Javascript本身并不支持面向对象,它没有访问控制符,它没有定义类的关键字class,它没有支持继承的extend或冒号,它也没有用来支持虚函数的virtual,不过,Javascript是一门 ...
- https学习笔记
HTTPS协议 HTTPS可以认为是HTTP + TLS.HTTP协议大家耳熟能详了,目前大部分WEB应用和网站都是使用HTTP协议传输的.TLS是传输层加密协议,它的前身是SSL协议,最早由nets ...
- 编程算法 - 旋转矩阵 代码(C)
旋转矩阵 代码(C) 本文地址: http://blog.csdn.net/caroline_wendy 输出旋转矩阵, 使矩阵是按对角线螺旋上升, 在输出规则确定以后, 就能够推断, 上升规律是, ...
- 1.QT该容器QVector,QList,QSet,QMap,QQueue,QStack,QMultiMap,QSingleList等待
1 新建一个项目 在pro文件里仅仅须要加上CONFIG += C++11 main.cpp #include <QMap> int main() { QMap<int,QStri ...