很久以前,老王去饭店吃饭,需要先到饭店,七荤八素点好菜,坐等饭菜上桌,然后大快朵颐,不亦乐乎。有了第三方订餐外卖平台(代理),老王懒得动身前往饭店,老王打个电话或用APP,先选好某个饭店,再点好菜,外卖小哥会 送上门来。由于某个品牌的饭店口碑特别好,食客络绎不绝涌入,第三方订餐电话也不绝于耳,但是限于饭店接待能力有限,无法提供及时服务,很多食客等得不耐烦了,纷纷铩羽而归,饭店老总看着煮熟的鸭子飞走了,心疼不已。痛定思痛,老总又成立了几个连锁饭店,形成一个集群,对外提供统一标准的菜品服务,电话订餐电话0551-xxx-8888,当食客涌入饭店总台,总台将食客用大巴运到各个连锁店,这样食客既不需要排队,各连锁店都能高速运转起来,一举两得,老总乐开了花,并为此种运作模式起名为“反向代理”(Reverse Proxy)。

反向代理

在计算机世界里,由于单个服务器的处理客户端(用户)请求能力有一个极限,当用户的接入请求蜂拥而入时,会造成服务器忙不过来的局面,可以使用多个服务器来共同分担成千上万的用户请求,这些服务器提供相同的服务,对于用户来说,根本感觉不到任何差别。

反向代理的实现
(1)需要有一个负载均衡设备来分发用户请求,将用户请求分发到空闲的服务器上
(2)服务器返回自己的服务到负载均衡设备
(3)负载均衡将服务器的服务返回用户

以上的潜台词是:用户和负载均衡设备直接通信,也意味着用户做服务器域名解析时,解析得到的IP其实是负载均衡的IP,而不是服务器的IP,这样有一个好处是,当新加入/移走服务器时,仅仅需要修改负载均衡的服务器列表,而不会影响现有的服务。谈完反向代理服务,再来谈谈终端用户常用的代理服务。

代理
(1)用户希望代理服务器帮助自己,和要访问服务器通信,为了实现此目标,
需要以下工作:
a ) 用户IP报文的目的IP = 代理服务器IP
b ) 用户报文端口号 = 代理服务器监听端口号
c ) HTTP 消息里的URL要提供服务器的链接
(2)代理服务器可以根据 c )里的链接与服务器直接通信
(3)服务器返回网页
(4)代理服务器打包(3)中的网页,返回用户。

代理服务器应用场景
场景一
如果不采用代理,用户的IP、端口号直接暴露在Internet(尽管地址转换NAT),外部主机依然可以根据IP、端口号来开采主机安全漏洞,所以在企业网,一般都是采用代理服务器访问互联网。

那代理服务器就没有安全漏洞吗?
相比千千万万的用户主机,代理服务器数量有限,修补安全漏洞更方便快捷。

场景二
在一个家庭局域网,家长觉得外部的世界是洪水猛兽,为了不让小盆友们学坏,决定不让小盆友们访问一些网站,可小盆友们有强烈的逆反心理,侬越是不让我看,我越是想看,于是小盆友们使用了代理服务器,这些代理服务器将禁止访问的网页打包好,然后再转交给小盆友,仅此而已。
当然关键的关键是代理服务器不在禁止名单当中!

反向代理案例

server.js

const http = require('http');
const https = require('https')
const reqOption = { // getman产生的虚拟数据的请求地址protocol: 'https:',host: 'getman.cn',path: '/mock/shopList',method: 'POST',headers: {"content-type": "application/json",}
}
let server = http.createServer((req, res) => {// 写请求头,解决跨域res.setHeader('Access-Control-Allow-Origin', 'http://192.166.1.188:5500'); res.setHeader("Access-Control-Allow-Headers", "X-Requested-With");res.setHeader("Access-Control-Allow-Methods", "PUT,POST,GET,DELETE,OPTIONS");let _data = ''req.on('data', data => _data += data)req.on('end', () => {proxyApi(_data).then((_res) => { // 服务端收到前端请求后,请求目标服务器,将结果返回至前端res.write(_res)res.end()})})
})function proxyApi(_data) {return new Promise((resolve, reject) => {let req = https.request(reqOption, (res) => {let data = '';res.on('data', (chunk) => {data += chunk;});res.on('end', () => {resolve(data)});})req.write(_data)req.end();})
}
server.listen(1024, () => console.log("1024服务开启,开始侦听"));

反向代理为何叫反向代理?(含案例)相关推荐

  1. nginx 反向代理和负载均衡策略实战案例

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试资料 作者:glmapper https://juejin.im/pos ...

  2. 用nginx TCP反向代理作mail邮件代理

    用nginx TCP反向代理作mail邮件代理 用nginx TCP反向代理作mail邮件代理 1. 背景 2. Nginx安装(包括nginx_upstream_check_module) 3. N ...

  3. 使用ssh正向连接、反向连接、做socks代理的方法

    文章出处:http://dzmailbox.blog.163.com/blog/static/120534385201232642637847/ 最近才发现ssh有多么的强大! 在网上搜了半天,发现大 ...

  4. Squid服务器应用(Squid传统代理、Squid透明代理、ACL访问控制、Squid日志分析、Squid反向代理)

    文章目录 一.缓存代理概述 二.Squid代理服务器 三.代理的工作机制 四.Squid代理的类型 五.部署Squid代理服务器步骤 (一).安装Squid服务 (二).构建传统代理服务器 (三).构 ...

  5. Nginx代理——正向、反向代理,动静分离和负载均衡

    文章目录 一.Nginx代理概述 (1)什么是正向代理和反向代理 -正向代理: -反向代理 -反向代理和正向代理的区别 (2)配置代理 -Nginx代理配置语法 -配置正向代理 -Nginx反向代理示 ...

  6. 负载均衡 反向代理为何叫反向代理?

    转  https://www.zhihu.com/question/24723688 与正向代理比起来,反向代理是什么东西反向了? 关注者 1217 被浏览 184352 41 个回答 刘志军 公众号 ...

  7. 【网站架构】Nginx 4层、7层代理配置,正向代理、反向代理详解

    大家好,欢迎来到停止重构的频道. 本期我们讨论网络代理. 在往期<大型网站 安全性>介绍过,出于网络安全的考虑,一般大型网站都需要做网络区域隔离,以防止攻击者直接操控服务器. 网站系统的应 ...

  8. nginx反向代理以及nginx反向代理三种方式

    nginx反向代理的三种模式分别是: 一.正向代理(Forward Proxy) 二.反向代理(reverse proxy) 三.透明代理 Nginx性能很高的,尤其是作为一个代理服务器,因为它用的是 ...

  9. squid 代理服务器--传统模式、代理模式、反向代理、acl控制、sarg日志(实验+理论详解)

    文章目录 一.squid 概述 二.传统dl搭建 2.1.实验环境 2.2.实验过程 2.2.1.部署squid 服务 2.2.2.配置传统模式 2.2.3.真机测试 三.透明dl搭建 3.1.实验环 ...

  10. 你需要知道的前端跨域知识(同源、正向代理、反向代理、前端代理、nignx反向代理)

    你需要知道的前端跨域知识(同源.正向代理.反向代理.前端代理.nignx反向代理) 一.什么是跨域? 当一个请求url的协议名.主机号.端口号三者任意一个或多个与当前url不同,即可称为跨域. 二.为 ...

最新文章

  1. 小白学数据分析-----Excel制作INFOGRAPHIC
  2. 2021佛山市地区高考成绩排名查询,佛山市高中排名分数线,佛山高中排名2021最新排名...
  3. Java中通过ActionEvent判断是哪个按钮
  4. python画同心圆程序_python – matplotlib:如何在给定的半径范围内绘制同心圆
  5. java定义一个course类,求指教定义一个学生类 ,大学生小学生,定义一个选课接口...
  6. python特征递归消除
  7. SCRF的简介及防护手段
  8. Avalanche发布AvalancheGo v1.2.3版本
  9. Python3爬虫数据入数据库---把爬取到的数据存到数据库,带数据库去重功能
  10. B00002 C语言位字段实例
  11. 144项ppt制作技术
  12. NC协议服务器端库登陆失败,NC数据库日常维护
  13. 手机连上电脑热点发现网络不可用,怎么办?
  14. android10隐藏ssid,SSID隐藏手机如何连接 手机连接隐藏ssid无线网络教程
  15. 安装python3.5.0出现0x80072eff错误_我在网上用WINDOWS UPDATE更新WINDOWS,出现错误:0x80072EFF,该怎么办?...
  16. BAPI_GOODSMVT_CREATE移库操作(WMS TO SAP)
  17. 利用NEO与Unity制作游戏(第2部分)
  18. 轻松解决 f2pool鱼池ethermine连接失败antpool矿池连接不上的问题E池连接超时
  19. 使用HBuilder开发移动APP
  20. PJSIP编译与使用说明

热门文章

  1. 马化腾致信合作伙伴:灰度法则的七个维度
  2. 猪齿鱼_03_领域模型
  3. 记12306货运系统“抢订空车”插件的编写--订车流程梳理
  4. C语言移动营业厅程序设计,C语言程序设计 陈锐主编,清华大学出版社)例题代码 前7章.doc...
  5. python读取grd数据_ARWpost处理后的grd数据使用fortran来读取
  6. matlab生成Z为常数的.grd格式数据
  7. CH7511BeDP转LVDS显示屏转接板CS5211电路图
  8. 学习沟通技巧--- SOFTEN法则与SOLER法则
  9. 解决PyCharm出现“更新 TKK 失败,请检查网络连接”的问题
  10. ip变更导致连接不到mysql的解决办法