集群反向代理实现负载均衡『nginx & apache2』

前言 今天在专题收录一篇关于ngixn与apache2实现负载均衡的文章,仔细看了一遍,有些地方存在错误,记得之前搭建过这样的环境,今天呢,好好记录分享一下。


nginx & apache 简单说说它俩的优点

  • nginx的并发量高、占用资源少,适用于前端或静态服务
  • apache服务超级稳定,适用于后端或动态服务

nginx & apache协作流程 一般而言,我们可以使用nginx以及apache实现集群服务器负载均衡,具体如何实现的呢?它们的工作流程又是如何的呢?

  • 第一步:客户端访问服务器的时候将会先访问nginx服务器
  • 第二步:nginx接受客户端请求后将会将请求转发到apache
  • 第三步:apache接收nginx的转发请求将会处理请求
  • 第四步:apache将处理后的请求返回客户端,完成一次访问

nginx & apache协作流程


Nginx的upstream分发机制 upstream按照轮询(默认)方式进行负载,每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。虽然这种方式简便、成本低廉。但缺点是:可靠性低和负载分配不均衡。适用于图片服务器集群和纯静态页面服务器集群。基本有如下几种:

  • 轮询( 默认 ) 适用于图片服务器集群和纯静态页面服务器集群。
upstream balance{
    server localhost:8080;
    server localhost:8081;
    server localhost:8082;
   ... ...
}
  • 指定权重 权重weight和访问比率成正比,用于后端服务器性能不均的情况。
upstream balance{
    server localhost:8080 weight=5;
    server localhost:8081 weight=10;
    server localhost:8082 weight=15;
   ... ...
}
  • IP绑定 ip_hash 每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题
upstream balance {
    ip_hash;
    server localhost:8080;
    server localhost:8081;
    server localhost:8082;
    ... ...
}
  • fair(第三方) 按后端服务器的响应时间来分配请求,响应时间短的优先分配。
upstream balance {
    fair;
    server localhost:8080;
    server localhost:8081;
    server localhost:8082;
    ... ...
}

nginx & apache安装

# 对于安装不多说(基于debian/ubuntu)
sudo apt-get install apache2 nginx -y

重点将在如下

对于更多的负载均衡理论可以自行搜索,这里旨在实践配置。

环境场景 为了方便配置,所有的服务都是安装在同一台机器上面。

Apache版本:Apache/2.4.7 (Ubuntu) Nginx版本: nginx/1.4.6 (Ubuntu)


  • nginx服务器只需要一台服务器即可,它的http服务器的端口使用默认的80,
  • apache启动多个端口,模拟多台服务器的80端口。端口分别为8001、8002、8003、8004。
  • 我们将客户端的请求通过nginx分别按照指定的分发机制转发到apache的8001、8002、8003、8004端口。
  • nginx采取权重的分发机制

配置Apache 前提:将默认的80端口关闭,因为80端口将为nginx所用。将默认的000-default.conf.bak重命后缀名即可(非conf)。 (1) 开启端口监听允许 在apache端口蒋婷配置文件/etc/apache2/ports.conf添加如下信息,记得关闭80端口监听。

Listen 8001
Listen 8002
Listen 8003
Listen 8004

(2) 配置虚拟目录映射 个人习惯,将每一个虚拟目录配置写一个配置文件,在这里将新建四个conf文件,对应的配置如下: /etc/apache2/ites-enabled/8001.conf

<VirtualHost *:8001>
    ServerAdmin localhost:8001
    DocumentRoot /home/alic/www/proxy/8001
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

/etc/apache2/ites-enabled/8002.conf

<VirtualHost *:8002>
    ServerAdmin localhost:8002
    DocumentRoot /home/alic/www/proxy/8002
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

剩下的8003.conf、8004.conf就不多说了! (3) 重启Apache,没有问题浏览器就可以直接打开各个端口的访问了

sudo service nginx restart

配置Nginx (1) upstream 定义一个upstream变量,即定义接收转发的服务器 /etc/nginx/sites-enabled/default

#代理转发地址
upstream balance{
    server localhost:8001 weight=5;
    server localhost:8002 weight=10;
    server localhost:8003 weight=15;
    server localhost:8004 weight=20;    
}

(2) server 配置监听80端口的server,将请求转发到upstream /etc/nginx/sites-enabled/default

server {
    listen 80 default_server;
    listen [::]:80 default_server ipv6only=on;
    server_name localhost;

    location / {
        try_files $uri $uri/ =404;
        #修改proxy_pass这里即可
        proxy_pass http://balance;
    }

(3) 重启nginx

sudo service nginx restart

至此,已经配置完成了,我们可以检验检验!!!

➜  ~ curl 127.0.0.1
I am proxy apache2 port 8003
➜  ~ curl 127.0.0.1
I am proxy apache2 port 8004
➜  ~ curl 127.0.0.1
I am proxy apache2 port 8004
➜  ~ curl 127.0.0.1
I am proxy apache2 port 8001
➜  ~ curl 127.0.0.1
I am proxy apache2 port 8001
➜  ~ curl 127.0.0.1
I am proxy apache2 port 8002
... ...

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏云计算教程系列

如何在Ubuntu 18.04上使用LEMP将Symfony 4应用程序部署到生产中

Symfony是一个开源PHP框架,具有优雅的结构和声誉,无论其大小如何,都是一个适合启动任何项目的框架。作为一组可重用的组件,其灵活性,体系结构和高性能使其成...

867
来自专栏mySoul

linux基础 二

可分享的,可分享给其他系统挂载使用的目录,即执行文件,用户邮件,可分享给网络上其他用户的

803
来自专栏数据和云

挖掘Oracle日志的“大杀器”

编辑手记: LogMiner是用于Oracle日志挖掘的利器,使用该工具可以轻松获得Oracle 重做日志文件(归档日志文件)中的具体内容,LogMiner分析...

2113
来自专栏运维小白

11.23 访问日志切割

访问日志切割目录概要 日志一直记录总有一天会把整个磁盘占满,所以有必要让它自动切割,并删除老的日志文件 把虚拟主机配置文件改成如下: <VirtualHost...

19110
来自专栏程序员叨叨叨

PHP通信接口大坑集锦

最近因为毕设在搭建接口及数据库环境,使用Apache+MySQL+PHP在阿里云ECS服务器中配置,之前在本地配置过并成功实现,但是在阿里云中却频频出错,记录下...

712
来自专栏大数据和云计算技术

MongoDB系列11:Munin监控MongoDB

Munin是一个网络资源监控工具,可以帮助分析资源趋势。默认提供了大量的分析图形。以下讲述如何设置MongoDB的Munin监控插件。

933
来自专栏静默虚空的博客

Babel 入门指南

Babel 入门指南 ​⚠ 注意: Babel 可以与很多构建工具(如 Browserify、Grunt、Gulp 等)进行集成。由于本教程选择 Webpa...

1995
来自专栏云计算教程系列

如何在Ubuntu 16.04上设置Apache虚拟主机

Apache Web服务器是在互联网上提供Web内容的最流行方式。它占互联网上所有活跃网站的一半以上,并且非常强大和灵活。

1002
来自专栏AndroidTv

教你一步步发布一个开源库到 JCenter

这方面的博客网上已经特别多了,所以本篇并不打算仅仅只是记录流程步骤而已,而是尽可能讲清楚,为什么需要有这个步骤,让大伙知其然的同时还知其所以然,那么掌握就会更深...

34614
来自专栏北京马哥教育

Linux之任务计划

用过windows的同学应该都知道在控制面板中有一个“任务计划”选项,我们可以通过向导设置让计算机在某个时间点或者开机时运行某个脚本或者批处理等等,方便我们的...

2504

扫码关注云+社区