在Docker中实现Nginx反向代理

前言

前段时间学习了Docker容器,觉得Docker在搭建环境方面非常方便,利用搭建Nginx反向代理之机,熟悉和推广一下Docker的知识。Docker是一个容器软件,可以看成是Linux下的虚拟机,但是比虚拟机轻便的多,不占内存,很多环境都不需要自己搭建,直接使用命令就可以从官网上拉取相关镜像(镜像,相当于已经搭建好的虚拟机),并且对于各个镜像和环境都比较容易维护。

概念

反向代理,是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个服务器。而nginx反向代理,是使用nginx服务器对内网的web服务做一个代理,当客户端访问web服务时,Nginx把内网web服务器发布的web服务返回给客户端,而客户端只知道Nginx服务器,并不知道web内容是内部web服务器发布的。使用Nginx反向代理服务可以做内网服务器的替身,也可以做负载均衡。

实现

在docker中安装一个nginx服务器和两个web服务器,分别配置nginx,实现简单一对一的反向代理(1个nginx服务器对1个Web服务器)和1对多的负载均衡(1个nginx服务器对多个Web服务器)。

环境介绍

配置一台Nginx服务器和两台web服务器,客户端可访问Nginx服务器,不可访问内网的两台web服务器,但可通过Nginx代理服务器访问Apache提供的web服务内容(客户端实际是不知道有Apache服务器的)。

注意:Docker容器开放的服务如web服务不可直接访问,宿主机(192.168.131.131)也不可直接访问,需配置Docker容器的web端口和宿主机某端口进行绑定。

docker run -it-p 宿主机端口:容器端口 容器镜像名称 /bin/bash

run //表示运行此镜像成为容器

-p //表示把宿主机端口和容器端口做一个绑定(或称为映射)

/bin/bash //以命令行模式运行

eg: docker run-it -p 1000:80 my_centos_nginx /bin/bash

此命令代表将运行Nginx容器,并将Nginx容器的80端口和宿主机的1000端口做一个映射。

这样,在容器中运行Nginx服务后(输入nginx),就可以通过访问http://192.168.131.131:1000进行访问了。

同理,可设置好两个apache服务器。只是绑定的宿主机的端口不同,启动httpd服务即可。

Apache服务器1:

Apache服务器2:

注意:在做反向代理配置之前保证Nginx容器可以访问apache服务:

curl 192.168.131.131:2221(或端口为2222)

有很多方式,最简单的方式是在宿主机上使用iptables -F命令清除防火墙规则。

配置简单反向代理

修改/etc/nginx/conf.d/*.conf文件(一般是修改/etc/nginx/目录下的nginx.conf),做如下配置:

其中apache为自定义名称,server对应的是内网apache服务器1的IP地址和端口。然后即可访问Nginx服务器来访问内网的apache服务器1:

配置负载均衡

使用Nginx实现负载均衡常见的有如下几种方式(目前我所知道的):

循环机制 – 循环分发对应用服务器的请求

最少连接机制 – 将请求发送给连接数最少的服务器

ip-hash机制 – 哈西函数用于确定请求被配那个服务器(基于客户端IP地址)

此次演示采用循环机制中的加权负载均衡机制,举个例子:

每当有8个请求,前5个请求交给domain1服务器去处理,接下来2个请求交给domain2服务器去处理,权重(weihgt)不设置默认为1,最后一个请求交给domain3服务器去处理。

我们在Nginx容器服务器中修改/etc/nginx/conf.d/*.conf文件,做如下配置:

重启nginx服务后连续访问nginx服务器web服务:http://192.168.131.131:1000/,可间断的访问到内网的两个apache服务器不同的起始页面。

成功实现nginx负载均衡!

优点

Nginx做反向代理服务器有如下优点:

实现负载均衡,减少开支;

方便统一管理,可以做集群管理。

相当于一道智能防火墙,主要体现在如下几个方面:

a.防止内网服务器端口对外开放,统一成一个端口对外开放.

b.一定程度上防止敏感信息泄露,减少渗透攻击针对中间件的渗透。

c.一定程度上防止漏洞利用,比如内网服务器存在MS-010,但由于端口不对外开放而无法利用。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20181022G1KGYL00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

同媒体快讯

扫码关注云+社区

领取腾讯云代金券