反向代理从传输上分可以分为2种:

1:同步模式(apache-mod_proxy和squid)

2:异步模式(lighttpd 和 nginx)

在nginx的文档说明中,提到了异步传输模式并提到它可以减少后端连接数和压力,这是为何?

下面就来讲解下传统的代理(apache/squid)的同步传输和lighttpd,nginx的异步传输的差异。

同步传输:浏览器发起请求,而后请求会立刻被转到后台,于是在浏览器和后台之间就建立了一个通道。在请求发起直到请求完成,这条通道都是一直存在的。
异步传输:浏览器发起请求,请求不会立刻转到后台,而是将请求数据(header)先收到nginx上,然后nginx再把这个请求发到后端,后端处理完之后把数据返回到nginx上,nginx将数据流发到浏览器,这点和lighttpd有点不同,lighttpd是将后端数据完全接收后才发送到浏览器。

小结:apache和squid的反向会增加后端web的负担,因为每个用户请求都会在proxy上与后端server建立的长久链接,知道数据取完前,连接都不会消失。因为wan速度与lan速度的不同,虽然lan之间的速度是极度快的,但是用户的wan连接决定了这个时间长。而lighttpd和nginx的异步模式,是不管你用户要求的数据有多大,都是先收下来,再与后端联系,这是非常迅速的速度,所以proxy与后端连接时间也会很短,几十M的东西也是几秒内。后端不需要维护这么多连接。而lighttpd也和nginx不同的异步,lighttpd是先收完再转向客户浏览器,而nginx是边收数据边转向用户浏览器。

那么这到底有什么好处呢?

1. 假设用户执行一个上传文件操作,因为用户网速又比较慢,因此需要花半个小时才能把文件传到服务器。squid的同步代理在用户开始上传后就和后台建立了连接,半小时后文件上传结束,由此可见,后台服务器连接保持了半个小时;而nginx异步代理就是先将此文件收到nginx上,因此仅仅是nginx和用户保持了半小时连接,后台服务器在这半小时内没有为这个请求开启连接,半小时后用户上传结束,nginx才将上传内容发到后台,nginx和后台之间的带宽是很充裕的,所以只花了一秒钟就将请求发送到了后台,由此可见,后台服务器连接保持了一秒。同步传输花了后台服务器半个小时,异步传输只花一秒,可见优化程度很大。

2. 在上面这个例子中,假如后台服务器因为种种原因重启了,上传文件就自然中断了,这对用户来说是非常恼火的一件事情,想必各位也有上传文件传到一半被中断的经历。用nginx代理之后,后台服务器的重启对用户上传的影响减少到了极点,而nginx是非常稳定的并不需要常去重启它,即使需要重启,利用kill -HUP就可以做到不间断重启nginx。

3. 异步传输可以令负载均衡器更有保障,为什么这么说呢?在其它的均衡器(lvs/haproxy/apache等)里,每个请求都是只有一次机会的,假如用户发起一个请求,结果该请求分到的后台服务器刚好挂掉了,那么这个请求就失败了;而nginx因为是异步的,所以这个请求可以重新发往下一个后台,下一个后台返回了正常的数据,于是这个请求就能成功了。还是用用户上传文件这个例子,假如不但用了nginx代理,而且用了负载均衡,nginx把上传文件发往其中一台后台,但这台服务器突然重启了,nginx收到错误后,会将这个上传文件发到另一台后台,于是用户就不用再花半小时上传一遍。

4. 假如用户上传一个10GB大小的文件,而后台服务器没有考虑到这个情况,那么后台服务器岂不要崩溃了。用nginx就可以把这些东西都拦在nginx上,通过nginx的上传文件大小限制功能来限制,另外nginx性能非常有保障,就放心的让互联网上那些另类的用户和nginx对抗去吧。

用异步传输会造成问题:

后台服务器有提供上传进度的功能的话,用了nginx代理就无法取得进度,这个需要使用nginx的一个第三方模块来实现。

squid,nginx,lighttpd反向代理的区别相关推荐

  1. Nginx正向代理和反向代理的区别

    正向代理与反向代理的区别: 1.正向代理相对于目标服务器而言隐藏了客户端的真实IP地址,因为对于目标服务器而言所有请求都是从正向代理服务器发出的,正向代理主要是为了突破网络访问限制,比如ke xue上 ...

  2. 运维篇—几句话搞明白nginx正向和反向代理的区别

    文章目录 一.区别 二.为什么有正向代理及举例 2.1为什么有正向代理 2.2配置正向代理举例 三.为什么有反向代理及举例 3.1为什么有反向代理 3.2配置反向代理举例 一.区别 1.代理服务器如果 ...

  3. 正向代理和反向代理的区别Nginx配置虚拟主机流程(后续更新)

    目录 目标 安装Nginx 配置虚拟主机 准备 方法一 方法二(推荐) 验证虚拟主机 正向代理和反向代理的区别 区别&案例 正向代理和反向代理流程 目标 熟练在Linux安装单机Nginx: ...

  4. Nginx高性能反向代理web服务器

    基础 Nginx简介 背景介绍 Nginx("engine x")一个具有高性能的[HTTP]和[反向代理]的[WEB服务器],同时也是一个[POP3/SMTP/IMAP代理服务器 ...

  5. Nginx配置反向代理,一篇搞定!

    欢迎关注方志朋的博客,回复"666"获面试宝典 来源:blog.csdn.net/zxd1435513775/article/ details/102508463 一.引言 其他话 ...

  6. Nginx做反向代理和负载均衡时“X-Forwarded-For”信息头的处理

    转载自:https://blog.51cto.com/wjw7702/1150225 一.概述 如今利用nginx做反向代理和负载均衡的实例已经很多了,针对不同的应用场合,还有很多需要注意的地方,本文 ...

  7. nginx的反向代理proxy_pass指令

    nginx的反向代理proxy_pass指令 1. 首先什么是代理服务器? 客户机发送请求时,不会直接发送到目的主机,而是先被代理服务器收到,代理服务器收到客服机的请求后,再向目的机发出,目的机就会返 ...

  8. nginx利用反向代理实现获取用户真实ip

    我们访问互联网上的服务时,大多数时,客户端并不是直接访问到服务端的,而是客户端首先请求到反向代理,反向代理再转发到服务端实现服务访问,通过反向代理实现路由/负载均衡等策略.这样在服务端拿到的客户端IP ...

  9. WEB请求处理二:Nginx请求反向代理

    上一篇<WEB请求处理一:浏览器请求发起处理>,我们讲述了浏览器端请求发起过程,通过DNS域名解析服务器IP,并建立TCP连接,发送HTTP请求.本文将讲述请求到达反向代理服务器的一个处理 ...

最新文章

  1. 在Apache的POI XWPFRun对象分隔文本行
  2. SQL Server 查询性能优化——堆表、碎片与索引(一)
  3. HDU2222 Keywords Search(AC自动机模板)
  4. 最适合做老婆主播不是Rita?不是豚豚,也不是纪小鹿,是她
  5. C++模板剖析:函数模板、类模板解析
  6. python messagebox弹窗退出_python 弹窗提示警告框MessageBox的实例
  7. 富文本编辑器quill的集成
  8. 【数据结构】——构建二叉树,遍历二叉树
  9. 不要让人知道你是在笼络人心
  10. java设计模式工厂模式_Java中的桥梁设计模式
  11. R语言实现︱局部敏感哈希算法(LSH)解决文本机械相似性的问题(一,基本原理)
  12. LeetCode 387:first-unique-character-in-a-string
  13. 在苹果Mac上如何查找和删除文件?
  14. android 手机主题制作,怎么制作手机主题?
  15. 国仁网络资讯:微信视频号怎么给自己账号精准定位;账号定位又分为哪些类?
  16. Python数据分析案例-利用多元线性回归与随机森林回归算法预测笔记本新品价格
  17. mq for java,MQ For JAVA学习记录
  18. HCJ2:页面两栏式或三栏式布局
  19. margin 重叠问题的理解
  20. 倭黑猩猩机器人_科学美国人60秒:倭黑猩猩妈妈监管儿子的私生活

热门文章

  1. 数字图像处理:blob分析、阈值分割
  2. GitHub上共享的简单易用 TensorFlow 代码集
  3. 每个程序员都应该收藏的算法复杂度速查表
  4. AI视频行为分析系统项目复盘——技术篇3:tensorRT技术梳理
  5. 机器学习(实战)泰坦尼克号(游客存活率预估)
  6. 数据结构与算法(8-1)顺序表查找及优化
  7. JAVA Web项目中所出现错误及解决方式合集(不断更新中)
  8. 估计点云中的曲面法线
  9. Linux下设置mysql和tomcat开机启动
  10. 使用ATS中的regex_remap插件实现正则匹配的url重定向