centos7系统中docker环境下安装nginx并实现反向代理、负载均衡

在项目投产中,双机热备、负载均衡是集群部署中必不可少关键部分。不管是Windows系列的服务器还是linux家族的服务器都有多样化的解决方案。如Windows server可以使用Windows自带的故障转移和NLB(Network Load Balancer)来实现热备和负载均衡,也可以使用roseha加nginx来实现。linux系统比较常用解决方案的则是nginx和keepalived,本文先简单实践一下nginx的反向代理和负载均衡,keepalived实现双机热备下篇文章再加描述。

1、在centos7下安装docker

这一步骤在本篇文章里面暂不详述了,如有疑问可参考本人以前的一篇博客,或者在网站自行了解。

2、使用docker下载安装nginx

1、输入命令docker search nginx

centos7系统中docker环境下安装nginx并实现反向代理、负载均衡_第1张图片

2、输入命令docker pull nginx拉取第一项即可,下载完毕如下检查镜像docker images

centos7系统中docker环境下安装nginx并实现反向代理、负载均衡_第2张图片3、输入命令docker run -di --privileged=true -p 8080:80 --name mynginx nginx创建启动容器

4、登录mynginx容器docker exec -it mynginx /bin/bash

5、查看nginx的配置文件

nginx的关键配置文件在容器的/etc/nginx目录下

centos7系统中docker环境下安装nginx并实现反向代理、负载均衡_第3张图片

打开nginx.conf配置文件查看cat nginx.conf

centos7系统中docker环境下安装nginx并实现反向代理、负载均衡_第4张图片

可以观察到nginx.conf引用了conf.d目录下的conf配载文件,该目录下的配置文件是配置server服务的地方,可以详细观察一下该文件

centos7系统中docker环境下安装nginx并实现反向代理、负载均衡_第5张图片

我们需要配置什么服务可以在配置文件进行修改,但是每次修改还得登录nginx容器挺麻烦的,所以可以选择将该配置文件挂载到咱们的宿主机上面。另外nginx.conf引用了default.conf ,挂载的话还得挂载两个文件,我就把default.conf文件里面的内容拷贝到nginx.conf文件中,这样就只需要挂载一个nginx.conf文件就可以了。这个看个人的想法。

退出mynginx容器exit,在宿主机里面新建文件/opt/nginx-test/nginx/config/nginx.conf(用于挂载),在宿主机里面新建/opt/nginx-test/nginx/logs用于挂载日志文件,编辑/opt/nginx-test/nginx/config/nginx.conf,把容器里面的nginx.conf、default.conf文件内容拷贝到宿主机/opt/nginx-test/nginx/config/nginx.conf上面如下

centos7系统中docker环境下安装nginx并实现反向代理、负载均衡_第6张图片

引用处可以注销掉了。

删除原来的mynginx容器,避免容器名冲突,停止并删除原来的nginx容器,docker stop mynginx、docker rm mynginx,重新创建并启动一个新nginx容器

docker run -di --privileged=true -p 8080:80 -v /opt/nginx-test/nginx/logs:/var/log/nginx -v /opt/nginx-test/nginx/config/nginx.conf:/etc/nginx/nginx.conf --name mynginx nginx

这时候就可以访问了,宿主机的IP为192.168.169.131,访问其8080端口

centos7系统中docker环境下安装nginx并实现反向代理、负载均衡_第7张图片

到这nginx就安装完毕了。

3、反向代理项目准备

自己用springboot随便写了一个测试工程两个简单的接口,部署在192.168.169.137、192.168.169.131两台机器上(都是VMware里面的虚拟机),本机访问

centos7系统中docker环境下安装nginx并实现反向代理、负载均衡_第8张图片

页面随便在网上down下来的。

4、反向代理实现

修改宿主机上/opt/nginx-test/nginx/config/nginx.conf配置文件,添加反向代理配置

centos7系统中docker环境下安装nginx并实现反向代理、负载均衡_第9张图片

重启mynginx容器docker restart mynginx,并且访问http://192.168.169.131:8080/,8080为宿主机和nginx容器的对应端口,会发现静态资源没有被加载。

centos7系统中docker环境下安装nginx并实现反向代理、负载均衡_第10张图片

凡事不要慌,问题不大。解决方案如下,添加这一坨坨

centos7系统中docker环境下安装nginx并实现反向代理、负载均衡_第11张图片

重启容器访问继续访问

centos7系统中docker环境下安装nginx并实现反向代理、负载均衡_第12张图片

到这反向代理就over了,还是比较简单的。

5、负载均衡的实现

我部署在192.168.169.137、192.168.169.131两台机器上的jar还有一个接口,是获取本机的主机名,分别访问的结果

centos7系统中docker环境下安装nginx并实现反向代理、负载均衡_第13张图片

centos7系统中docker环境下安装nginx并实现反向代理、负载均衡_第14张图片

在nginx容器上增加负载均衡配置如下,

centos7系统中docker环境下安装nginx并实现反向代理、负载均衡_第15张图片

记住呦,upstream里面只能写到IP+端口号!!,upstream是nginx配置负载均衡的主要标签,这里只演示这种简单的方式,权重、根据IP负载、智能负载啥的可以自行研究。重启mynginx容器,访问可以发现

centos7系统中docker环境下安装nginx并实现反向代理、负载均衡_第16张图片

centos7系统中docker环境下安装nginx并实现反向代理、负载均衡_第17张图片

 

OK,到这使用docker部署nginx,简单实现反向代理、负载均衡就实现了,本文纯属案例且能力有限,不喜勿喷!!

你可能感兴趣的:(程序架构,功能实现,docker,nginx,centos,java,负载均衡)