当前位置: 首页 > news >正文

一文搞懂nginx的反向代理 负载均衡

网上的资料都各显神通很乱,我在网上看过很多资料后,且断续经历过很长时间,终于搞懂了。这篇文章很简短。

理论知识

nginx apache 都是 web 服务服务器软件。

nginx为什么性能那么高,为什么比apache好?

主要因为nginx的请求处理模式是异步非阻塞,apache是同步阻塞。

什么是同步阻塞?

一个http请求的过程,简单来说是这样:用户点击一个页面,会先连接到 web 服务器,apache再连接我们的web应用(比如php python),web应用会连接数据库以及处理些业务,这就需要一些时间处理,再最终返回给用户。

这个过程,如果web应用花了3秒,同步阻塞模式会等待3秒,等待3秒之后拿到结果,再返回给用户。然后再处理下一个用户请求。

什么是异步非阻塞?

上面的http请求过程,如果web应用花了3秒,异步非阻塞模式(nginx)不等待,马上去处理下一个用户请求。3秒后web应用处理完会有事件主动通知说我处理完了,然后再返回给用户。

什么是正向代理?
如图,用户的电脑上不了某网站,所以通过能上这网站的代理服务器,去上了这个网站。中间这代理服务器,代表用户,去上某网站,这叫正向代理。用户和代理服务器是一伙的。
在这里插入图片描述

什么是反向代理?
代理服务器,代表了这个网站,挡在前面。代理服务器和应用服务器是一伙的。用户上某网站时,会先自动到达代理服务器,然后代理服务器再分配请求给具体网站服务器。这叫反向代理。
在这里插入图片描述

什么是负载均衡?
现在再来理解负载均衡,就很容易明白了。负载均衡就是通过反向代理来实现的,用户请求某网站时,代理服务器按照一定规则轮流请求多台应用服务器中的一台(这个网站弄了三台服务器)。这就达到了提升网站并发能力的效果。
在这里插入图片描述

负载均衡策略:

(1) 轮询
轮流把用户请求的流量分配给每一台应用服务器。缺点是不能保存会话,比如用户存在session里的登录信息。

(2) 权重 weight
按机器的不同能力,分配不同的权重。比如一台服务器配置好,一台配置差,前者权重就可以配置高一些。

(3) ip_hash
按ip去计算hash,然后每个ip对应分配给固定的应用服务器。缺点是,用户拿着手机在公交车上上网时,网络时好时坏,切换网络,就不会分配到原来的那一台。

一般在企业中,我们会使用最简单的轮询,这轮询没什么不好的,简单方便。会话信息不一致问题,有很多解决办法,比如单独的验证服务器,或者无状态的JSON Web Token (JWT)方式。

相关文章:

  • Redis的哨兵模式搭建
  • 闭包、闭包应用场景
  • 瑞吉外卖 —— 2、后台登录和登出
  • 阿里云配置hadoop远程连接Web页面(如50070端口)
  • Linux 任务调度
  • Github每日精选(第32期):HTML智能仪表盘tabler
  • 对多个 CSV 文件做关联
  • 记录一次数据库CPU被打满的排查过程
  • 金九银十准备季:Java IO流面试题(含答案)
  • Kubeadm方式快速搭建K8S集群1.20版本
  • 手把手开发Admin 系列一(设计篇)
  • java计算机毕业设计西安财经大学校园一卡通管理系统源码+系统+数据库+lw文档+mybatis+运行部署
  • 丁鹿学堂前端培训:前端性能优化css篇(一)
  • MASA Stack 第四期社区例会
  • 钓鱼 - deb 包篡改
  • [ 一起学React系列 -- 8 ] React中的文件上传
  • 3.7、@ResponseBody 和 @RestController
  • AHK 中 = 和 == 等比较运算符的用法
  • JavaScript 基本功--面试宝典
  • nodejs实现webservice问题总结
  • Objective-C 中关联引用的概念
  • open-falcon 开发笔记(一):从零开始搭建虚拟服务器和监测环境
  • PHP的Ev教程三(Periodic watcher)
  • SpiderData 2019年2月23日 DApp数据排行榜
  • Vue源码解析(二)Vue的双向绑定讲解及实现
  • zookeeper系列(七)实战分布式命名服务
  • 百度小程序遇到的问题
  • 翻译--Thinking in React
  • 回顾2016
  • 基于Volley网络库实现加载多种网络图片(包括GIF动态图片、圆形图片、普通图片)...
  • 看图轻松理解数据结构与算法系列(基于数组的栈)
  • 前端每日实战 2018 年 7 月份项目汇总(共 29 个项目)
  • 前言-如何学习区块链
  • 使用Envoy 作Sidecar Proxy的微服务模式-4.Prometheus的指标收集
  • 使用Maven插件构建SpringBoot项目,生成Docker镜像push到DockerHub上
  • 世界编程语言排行榜2008年06月(ActionScript 挺进20强)
  • 手机端车牌号码键盘的vue组件
  • 问:在指定的JSON数据中(最外层是数组)根据指定条件拿到匹配到的结果
  • 用简单代码看卷积组块发展
  • 智能网联汽车信息安全
  • ​软考-高级-系统架构设计师教程(清华第2版)【第20章 系统架构设计师论文写作要点(P717~728)-思维导图】​
  • ​一帧图像的Android之旅 :应用的首个绘制请求
  • #微信小程序:微信小程序常见的配置传旨
  • #我与Java虚拟机的故事#连载14:挑战高薪面试必看
  • (11)MSP430F5529 定时器B
  • (2)(2.10) LTM telemetry
  • (附源码)springboot 基于HTML5的个人网页的网站设计与实现 毕业设计 031623
  • (十七)Flask之大型项目目录结构示例【二扣蓝图】
  • (五)MySQL的备份及恢复
  • (原创) cocos2dx使用Curl连接网络(客户端)
  • .bat批处理(四):路径相关%cd%和%~dp0的区别
  • .NET Core 通过 Ef Core 操作 Mysql
  • .NET下的多线程编程—1-线程机制概述
  • 。Net下Windows服务程序开发疑惑
  • [ vulhub漏洞复现篇 ] Celery <4.0 Redis未授权访问+Pickle反序列化利用