扫码订阅《 》或入驻星球,即可阅读文章!

GOLANG ROADMAP

阅读模式

  • 沉浸
  • 自动
  • 日常
首页
Go学习
  • Go学院

    • Go小课
    • Go视界
    • Go小考
    • Go实战
  • Go资源

    • 优质课程
    • 在线宝典
    • 资源下载
    • 帮找资源
训练营 🔥
  • Go体系课&实战训练营
  • 升值加薪陪跑训练营
Go求职
  • 求职刷题

    • 企业题库
    • 面试宝典
    • 求职面经
  • 求职服务

    • 内推互助
    • 求职助力
    • 内推公司
Go友会
  • 城市
  • 校园
推广返佣
  • 返佣排行
  • 返佣规则
  • 推广学院
实验区
  • Go周边
  • Go宝典

    • 推荐图书
    • 精品博文
  • Go开源

    • Go仓库
    • Go月刊
更多
  • 用户中心

    • 我的信息
    • 我的返佣
    • 我的消息
  • 玩转星球

    • 星球介绍
    • 星主权益
    • 吐槽专区
    • 成长记录
  • 合作交流

    • 商务合作
    • 讲师招募
    • 生态伙伴
author-avatar

GOLANG ROADMAP


首页
Go学习
  • Go学院

    • Go小课
    • Go视界
    • Go小考
    • Go实战
  • Go资源

    • 优质课程
    • 在线宝典
    • 资源下载
    • 帮找资源
训练营 🔥
  • Go体系课&实战训练营
  • 升值加薪陪跑训练营
Go求职
  • 求职刷题

    • 企业题库
    • 面试宝典
    • 求职面经
  • 求职服务

    • 内推互助
    • 求职助力
    • 内推公司
Go友会
  • 城市
  • 校园
推广返佣
  • 返佣排行
  • 返佣规则
  • 推广学院
实验区
  • Go周边
  • Go宝典

    • 推荐图书
    • 精品博文
  • Go开源

    • Go仓库
    • Go月刊
更多
  • 用户中心

    • 我的信息
    • 我的返佣
    • 我的消息
  • 玩转星球

    • 星球介绍
    • 星主权益
    • 吐槽专区
    • 成长记录
  • 合作交流

    • 商务合作
    • 讲师招募
    • 生态伙伴
  • 高可用系列

    • 《负载均衡知识点整理》
  • 负载均衡

    • 1.1 四层负载均衡与七层负载均衡的对比
    • 1.2 负载均衡算法
    • 1.3 LVS的原理及应用
    • 1.4 Nginx反向代理与负载均衡

扫码订阅《 》或入驻星球,即可阅读文章!

1.4 Nginx反向代理与负载均衡


GOLANG ROADMAP

一般的负载均衡软件如LVS实现的功能只是对请求数据包的转发和传递,从负载均衡下的节点服务器来看,接收到的请求还是来自访问负载均衡器的客户端的真实用户;而反向代理服务器在接收到用户的访问请求后,会代理用户重新向节点服务器(Web服务器、文件服务器、视频服务器)发起请求,反向代理服务器和节点服务器做具体的数据交互,最后把数据返回给客户端用户。在节点服务器看来,访问的节点服务器的客户端就是反向代理服务器,而非真实的网站访问用户,具体原理如图所示。

ngjixfxdlfuw

# 1.upstream_module

ngx_http_upstream_module是Nginx的负载均衡模块,可以实现网站的负载均衡功能即节点的健康检查。upstream模块允许Nginx定义一组或多组节点服务器,在使用时可通过proxy_pass代理方式把网站的请求发送到事先定义好的对应Upstream组的名字上。具体的upstream定义如下:

upstream restLVSServer{
	server 191.168.1.10:9000 weight=5 ;
	server 191.168.1.11:9000;
	server example.com:9000 max_fails=2 fail_timeout=10s backup;
}
1
2
3
4
5

如上代码定义了名为restLVSServer的upstream,并在其中定义了3个服务地址,在用户请求restLVSServer服务时,Nginx会根据权重将请求转发到具体的服务器。常用的upstream配置如下。

  • weight:服务器权重。
  • max_fails:Nginx尝试连接后端服务器的最大失败次数,如果失败时大于max_fails,则认为该服务器不可用。
  • fail_timeout:max_fails和fail_timeout一般会关联使用,如果某台服务器在fail_timeout时间内出现了max_fails次连接失败,那么Nginx会认为其已经挂掉,从而在fail_timeout时间内不再去请求它,fail_timeout默认是 10s,max_fails默认是1,即在默认情况下只要发生错误就认为服务器挂了,如果将max_fails设置为0,则表示取消这项检查。
  • backup:表示当前服务器是备用服务器,只有其他非backup后端服务器都挂掉或很忙时,才会分配请求给它。
  • down:标志服务器永远不可用。

# 2.proxy_pass

proxy_pass指令属于ngx_http_proxy_module模块,此模块可以将请求转发到另一台服务器,在实际的反向代理工作中,会通过location功能匹配指定的URI,然后把接收到的服务匹配URI的请求通过proxy_pass抛给定义好的upstream节点池。具体的proxy_pass定义如下:

location /download/ {
	proxy_pass http://192.168.1.13:9000/download/vedio/;
}
1
2
3

如 上 代 码 定 义 了 一 个 download 的 反 向 代 理 , 在 客 户 端 请求/download时,Nginx会将具体的请求转发给proxy_pass配置的地址处理请求,这里配置的地址是http://192.168.1.13:9000/download/vedio/。常用的proxy_pass配置如表所示。

image-20220729093931993

  • 1.upstream_module
  • 2.proxy_pass