Nginx负载均衡之HTTP反向代理(二)
2019-06-13阅读 3596

前面我们已经了解了负载均衡的基本概念,我们可以画个图来看看,从互联网进来的所有请求,都会先由Nginx负载均衡接收,然后再根据指定的策略来分发给后端的众多服务器,至于是哪些策略,后文会进行介绍,具体如下图所示

现在大部分的业务都以B/S结构的网站方式存在,接下来我们来试试做一个网站的负载均衡,我们要实现的目标:

1、后端有两台服务器,每台都可以对外提供服务,且同时对外提供;

2、后端的其中一台服务器故障时,不会中断用户访问;

通过这个实验,我们的网站将具备高可用性,因为只要不是后端服务器全部损坏,用户就始终可以访问到服务器,在访问量毕竟大时,Nginx将会把访问量分发到不同的服务器上进行承载,不会受限于单台服务器性能不足导致用户体验不佳的问题。

HTTP 负载均衡

目标: 通过Nginx来实现后端两台服务器的负载均衡,且以轮询的方式将请求分发到不同的服务器上

角色

机器名

IP地址

Nginx

Host1

192.168.30.130

Web Server

Host2

192.168.30.131

Web Server

Host3

192.168.30.132

新建一个http.conf的配置文件,我们将用这些文件来实现此实验目标

vim /etc/nginx/conf.d/http.conf

将以下内容复制粘贴到配置文件中

upstream httptest {

server 192.168.30.131:80    weight=1;

server 192.168.30.132:80    weight=1;

}

server {

listen 80;

server_name www.example.com;

access_log /var/log/nginx/httptest;

error_log /var/log/nginx/errortest;

location / {

index index.html;

proxy_pass http://httptest;

}

}

具体配置文件效果如下

测试一下配置文件是否有问题

nginx -t

启动nginx服务并开启防火墙

systemctl restart nginx

firewall-cmd --add-port=80/tcp

firewall-cmd --add-port=80/tcp --permanent

配置文件上第一行的upstream 是一个反向代理模块,httptest是字符串,下方的server 192这两行是真实的服务器地址,真正的网站是由他们提供的,我们来测试一下,根据server_name这一行来看,将会响应这个请求头,我们需要在Host2Host3服务器上做以下操作,生成网站内容,稍后看效果

Host2上执行以下命令

yum install httpd -y

echo lixiaohui > /var/www/html/index.html

systemctl restart httpd

firewall-cmd --add-port=80/tcp

firewall-cmd --add-port=80/tcp --permanent

Host3上执行以下命令

yum install httpd -y

echo lixiaohui222222222 > /var/www/html/index.html

systemctl restart httpd

firewall-cmd --add-port=80/tcp

firewall-cmd --add-port=80/tcp --permanent

以上命令是在两台服务器上安装了apache,并生成了不同的页面内容,我们快来试试通过nginx来访问吧~,大家要注意哦,如果想要用windows来访问,需要在Windows上加本地hosts文件

通过实验我们可以看到,随着用户的访问,Nginx将我们的请求分别在两台服务器上进行处理,大大提升了服务器的的负载能力,也屏蔽了单台服务器故障给用户带来的访问中断问题,提升负载能力的同时,还降低了访问中断的现象。

我们下一篇开始研究TCP 和UDP 的负载均衡做法,敬请期待哦~