Nginx: 反向代理和动静分离概述

news2024/9/26 3:30:32

反向代理

  • 反向代理服务器介于用户和真实服务器之间,提供请求和响应的中转服务
  • 对于用户而言,访问反向代理服务器就是访问真实服务器
  • 反向代理可以有效降低服务器的负载消耗,提升效率

1 )反向代理的模型

  • 现在我们有一个用户和真实服务器(通常在内网,无法直接访问到)
  • 我们通常会在中间加一个代理服务器(通常位于整个公司业务系统的边缘节点)
    • 边缘节点既能和内网保持连通, 同时还会配置一个公网的一个IP地址
    • 能够确保域名可以解析到这台代理服务器上的对应的IP地址
    • 从而确保用户请求可以到达我们这台代理服务器
  • 这个代理服务器充当的就是一个中间人的角色
    • 用户想要去访问后端的代理服务器的地址的时候
    • 其实并不知道你真实服务器在哪里
    • 它会将request的请求转发给我们的代理服务器
    • 代理服务器会再将这样一个请求转发给后端的一个真实服务器
    • 真实服务器拿到这样一个请求之后,就拆包找到请求体,请求头
    • 进行处理封包后,通过响应给代理服务器
    • 代理服务器拿到这样一个包之后,再把这个包传递给用户
  • 中间这个代理服务器,它其实相当于就是一个桥梁,起到的就是一个中间人的角色
    • 它将 request 或 response 在中间做一层中转
    • 而用户是不能够和后端的真实服务器发生任何关联的
  • 在用户和真实服务器之间加了一层代理服务器,为什么还能够提升效率呢?
    • 多了一层代理,就会多了一些网络的消耗,这个是一定的
    • 如果请求量比较少,确实效率会损耗,如果是大请求量和高并发的
    • 这种设计会事半功倍

2 )反向代理的优势

  • 隐藏真实服务器
    • 在内网里部署的一些真实的动态服务器来说,它本身的处理能力是很有限的
    • 将它们在内网中隐藏起来,而不让它直接接触到互联网,降低了这种攻击的可能性
  • 便于横向扩充后端动态服务
    • 一台不够,可以使用多台,便于横向扩充
  • 动静分离,提升系统健壮性
    • 在后端,动态服务器通常来说它提供的是动态服务
    • 而对 Nginx 自身来说,它处理静态服务是比较有优势的

3 )Nginx作为反向代理可支持的协议

  • 当用户的请求到达Nginx的时候,Nginx可以反向代理跟后端的应用服务器进行交互

  • 从而将动态请求分配给应用服务器,由应用程序服务器来进行处理, 处理完之后再返回给Nginx

  • Nginx 和 应用程序服务器交互的时候,它可以依据哪一些协议来进行工作

  • 大致可以把用户来的流量分为从四层和七层这样一个角度来说

  • 在四层,也就是我们TCP/UDP传输层所定义的一种协议
    • 只能够定位到IP+端口, 它跟很多的应用特性是没有关系的
    • 它也无法去判断具体业务的应用特性, 所以, 它能够做的工作并不多
    • 那这个时候用户过来的是TCP流量
    • Nginx 拿到之后传输给后端的应用服务器也只能是这个TCP流量
    • 也需要建立TCP连接,假如说,过来的是UDP流量,Nginx转发给后端应用服务器也是UDP的流量
    • 四层它是比较简单的,这个是由stream模块所提供的
  • 七层反向代理下支持哪些协议
    • 假如说,用户发过来是七层的HTTP协议, 通过HTTP访问Nginx
    • Nginx 可以将这一部分HTTP的流量转化为后面这七种不同的协议
    • 如果想使用uwsgi跟后端的应用程序服务器进行交互的时候
    • 后端的应用程序服务器部署的是用python写的一些外部框架
    • 还可以支持这个Google的grpc这样一个框架,可以把HTTP的流量通过一定的转换之后,转换到这个GRPC的流量,发给后端的应用程序服务器
    • 还可以转换成 memcached 的这样一些服务,假如说,HTTP请求中有一些特定的header,它可以根据header或者一些请求方法的不同,将对应这样一些header中的某一些参数转换为key,从而以 memcached 的协议的形式跟我们后端的应用程序服务器进行交互
    • 也支持基于websocket的协议的这种交互

动静分离

  • 动静分离是指在web服务器架构中,将静态页面与动态页面或者静态内容接口
    和动态内容接口分开不同系统访问的架构设计方法
  • 进而提升整个服务访问性能和可维护性

1 ) 设计模型演进

1.1 动静耦合

并发请求小,前后端耦合


1.2 动静分离

静态资源响应能力很强,动态资源需要业务逻辑计算

一台不够,可以多扩展几台

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2077515.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

新版cubemx生成CMake工程浮点数打印问题记录

问题现象 解决方案 set(CMAKE_C_LINK_FLAGS "${CMAKE_C_LINK_FLAGS} --specsnano.specs -u _printf_float")参考Cortex-M4权威指南 重新下载和测试

[Algorithm][综合训练][打怪][判断是不是平衡二叉树][最大子矩阵]详细讲解

目录 1.打怪1.题目链接2.算法原理详解 && 代码实现 2.判断是不是平衡二叉树1.题目链接2.算法原理详解 && 代码实现 3.最大子矩阵1.题目链接2.算法原理详解 && 代码实现 1.打怪 1.题目链接 打怪 2.算法原理详解 && 代码实现 自己的版本&…

C++ 设计模式——代理模式

C 设计模式——代理模式 C 设计模式——代理模式1. 主要组成成分2. 逐步构建代理模式2.1 抽象主题类定义2.2 真实主题类实现2.3 代理类实现2.4 主函数 3. 代理模式 UML 图代理模式 UML 图解析 4. 代理模式的优点5. 代理模式的缺点6. 代理模式的分类7. 代理模式和装饰者模式比较…

MybatisPlus:实现分页效果并解决错误:cant found IPage for args

我们在做开发使用mybatisplus 做分页查询的时候遇到了个问题: 继承 IPage拦截没有作用会默认分页,这个时候报了cant found IPage for args 错误~~~ 我们分析了下,其实这个问题很简单,是因为没有给默认值赋值,因为查询…

日撸Java三百行(day35:图的m着色问题)

目录 一、问题描述 二、思路分析 三、代码实现 总结 一、问题描述 在高中学习排列组合的时候,有一个非常经典的问题,就是涂色问题,即用m种颜色给n块区域涂色,要求每块区域只能涂同一种颜色且相邻区域的颜色不能相同&#xff…

pyinstaller将python程序打包成exe文件

将python代码打包成exe文件可以在不安装python环境的情况下直接运行python代码,譬如自己在自己的电脑上写好了代码,想发给其他人使用,可以用下述方法将python程序打包成exe文件,其他人直接执行exe文件即可使用该程序。 1.安装pyi…

二叉搜索树:数据结构之美

目录 引言基础知识 定义性质操作详解 插入节点删除节点查找节点遍历 前序遍历中序遍历后序遍历高级主题 平衡问题AVL树简介应用案例总结 引言 二叉搜索树(Binary Search Tree, BST)是一种特殊的二叉树,它的每个节点具有以下性质:左子树上的所有节点的键…

Python数据采集与网络爬虫技术实训室解决方案

在大数据与人工智能时代,数据采集与分析已成为企业决策、市场洞察、产品创新等领域不可或缺的一环。而Python,作为一门高效、易学的编程语言,凭借其强大的库支持和广泛的应用场景,在数据采集与网络爬虫领域展现出了非凡的潜力。唯…

Mysql重要参数

1、是否开启慢SQL日志 show VARIABLES like slow_query_log%; 2、慢SQL日志保存位置 show VARIABLES like slow_query_log_file%; 3、慢SQL的阈值,超过则是慢SQL,单位秒,默认10s show VARIABLES like long_query_time%;

小阿轩yx-Kubernetes存储入门

小阿轩yx-Kubernetes存储入门 前言 数据是一个企业的发展核心,它涉及到数据存储和数据交换的内容。在生产环境中尤为重要的一部分在 Kubernetes 中另一个重要的概念就是数据持久化 Volume。 Volume 的概念 对多数项目而言 数据文件的存储是非常常见的 在 Kube…

计算机的错误计算(七十四 )

摘要 回复网友的疑问:用错数解释计算机的错误计算(六十四)中的错误计算原因。 计算机的错误计算(六十四)到(六十九),以及(七十一)与(七十三&…

攻防世界 1000次点击

做题笔记。 下载解压 查壳。 32位ida打开。 查找字符串。 winmain函数写的,程序运行如下: 一开始思路是想着分析找到关键代码然后去od进行调试。 后来,额,不想看代码了。吐了。 尝试去字符串搜索flag样式,确实一发现…

高效恢复,无忧存储:2024年数据恢复工具大搜罗

不知道你是否了解过电子存储设备,我们的设备往往都存储在一个小小的芯片里,它为我们提供了数据携带的便捷性,当然也为我们带来了数据意外丢失的风险。为了我们的数据安全,我们来探讨一下有什么数据恢复工具能为我们的资料保驾护航…

Ruo-Yi 前后端分离如何不使用注解@DataSource的方式而是使用Mybatis插件技术实现多数据源的切换【可以根据配置文件进行开启/关闭】

Ruo-Yi 前后端分离如何不使用注解DataSource的方式而是使用Mybatis插件技术实现多数据源的切换【可以根据配置文件进行开启/关闭】 1、首先 配置文件: # 数据源配置 spring:datasource:type: com.alibaba.druid.pool.DruidDataSourcedriverClassName: com.mysql.c…

ZooKeeper--基于Kubernetes部署ZooKeeper

ZooKeeper 服务 服务类型: 无头服务(clusterIP: None),这是 StatefulSet(有状态集)必需的配置。 端口: 2181 (客户端): 用于客户端连接。 2888 (跟随者): 用于 ZooKeeper 服务器之间的连接。 3888 (领导者): 用于领导者…

邮政快递批量查询解决方案:提升业务运营效率

邮政快递批量查询:固乔快递查询助手的高效体验 在电商行业日益繁荣的今天,快递物流成为了连接商家与消费者的关键纽带。而对于需要处理大量订单的电商企业或个人而言,如何高效、准确地查询和跟踪快递物流信息显得尤为重要。幸运的是&#xf…

linux 云主机下载压缩包安装配置 maven 实录(华为云 EulerOS)

本想通过 yum install maven 直接安装的, 方便省事, 但报错说没找到, 于是只能手动安装了, 把整个过程记录了一下, 包括下载, 解压, 配置及验证的全过程, 并对用到的命令及参数作了详细说明, 需要的同学可以参考. maven 官网找到下载链接 首先要去到 maven 的官网, https://m…

OpenCV+Python自动填涂机读卡

接上一篇OpenCVPython识别机读卡-CSDN博客,既然可以识别机读卡填涂答案了,将标准答案绘制到机读卡上也就简单了。 工作原理 1.答题区域为整张图片最大轮廓,先找出答题区域。 2.答题区域分为6行,每行4组,第6行只有1组…

【Java设计模式】抽象文档模式:以灵活性简化数据处理

文章目录 抽象文档设计模式的意图抽象文档模式的详细解释及实际示例Java中抽象文档模式的编程示例抽象文档模式类图Java中何时使用抽象文档模式抽象文档模式的优点和权衡源码下载参考和致谢 抽象文档设计模式的意图 Java中的抽象文档设计模式是一种关键的结构设计模式&#xf…

【mysql集群之组复制】

目录 一、 mysql高可用之组复制 (MGR)组复制单主和多主模式实现mysql的组复制 二、 mysql-router(mysql路由)实现负载均衡 一、 mysql高可用之组复制 (MGR) MySQL Group Replication(简称 MGR )是 MySQL 官方于 2016 年 12 月推出的一个全新的高可用与高…