基于Nginx的负载均衡原理与实战

148 阅读3分钟
![](https://pic4.zhimg.com/80/v2-3aa04ad667a6938cce1f4432f1ba76c3_720w.jpg)

本文主要讲解以下3个方面介绍Nginx的负载均衡:

  • 负载均衡介绍
  • Nginx如何实现负载均衡
  • Nginx负载均衡配置项介绍

01负载均衡介绍

**什么是负载均衡?**顾名思义就是让客户端的请求均匀地分布到各个服务器上。从下图可以看出,客户端的请求先到达负载均衡器,由负载均衡器通过一系列算法将请求转发到某台上游的业务服务器上。

![](https://pic4.zhimg.com/80/v2-47e0d8245af23133065d319771f4e5b9_720w.jpg)

实现负载均衡的方式有很多,下面将列出几种方式,并对比优劣:

  • 硬件层面可以通过F5实现负载均衡,性能优异。F5的底层是在芯片层面做了优化,这样就使得它的性能不依赖主机操作系统的处理能力,但是F5价格高昂,一般小公司用不起
  • 软件层面可以通过LVS来实现负载均衡,这是一款中国人开发的软件。因为是软件层面的负载均衡,性能受到主机运算能力的制约
  • 除了LVS之外,还可以通过Nginx实现负载均衡,为了实现高可用需要和keepalived配合使用,Nginx实现负载均衡也是本文讲解的重点
  • 还可以在DNS层面做负载均衡,在域名解析的时候解析到不同的服务器上。优点是配置简单,非常容易实现,缺点是没有检测机制,不够均衡,容错能力比较差

02Nginx如何实现负载均衡

今天我们主要讨论Nginx如何实现负载均衡,Nginx的负载均衡是通过 upstream 来实现的,在 upstream 中指定若干个 server,格式如下:

![](https://pic4.zhimg.com/80/v2-4566462e5d3832305a48795342c91a7b_720w.jpg)

myserver 就是通过 upstream 定义的一组负载均衡模板,其中:

![](https://pic3.zhimg.com/80/v2-504f7d71ab9ce66bc3810327bfc97542_720w.jpg)

在配置完upstream后,还要让客户端过来的请求反向代理到 myserver,格式如下:

![](https://pic4.zhimg.com/80/v2-78b3c6fee95ef9836001354b20ac3ab2_720w.png)

这样就完成了负载均衡的配置,但是在实际需求中除了上面的设置外,还会增加一些额外设置:

  • 负载均衡策略设置
  • 请求上游服务器携带请求头信息
  • upstream 模块中其他参数设置

Nginx的负载均衡策略有5种方式:

![](https://pic3.zhimg.com/80/v2-ce2b44b26a5a5ab84d7d41177498943d_720w.jpg)

03Nginx负载均衡配置项介绍

下面我们将介绍一下proxy模块的参数:

![](https://pic1.zhimg.com/80/v2-8115ae3b964ef2fb9a7de75b024edaf3_720w.jpg)

各个参数介绍:

![](https://pic1.zhimg.com/80/v2-dd7efbfec63630cc29ddd9d6b6f5fdca_720w.jpg)

以上内容希望帮助到大家, 很多PHPer在进阶的时候总会遇到一些问题和瓶颈,业务代码写多了没有方向感,不知道该从那里入手去提升,对此我整理了一些资料,包括但不限于:分布式架构、高可扩展、高性能、高并发、服务器性能调优、TP6,laravel,YII2,Redis,Swoole、Swoft、Kafka、Mysql优化、shell脚本、Docker、微服务、Nginx等多个知识点高级进阶干货需要的可以免费分享给大家 ,需要戳这里 PHP进阶架构师>>>实战视频、大厂面试文档免费获取