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

2024-08-27 08:28

本文主要是介绍Nginx: 反向代理和动静分离概述,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

反向代理

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

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 动静分离

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

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

这篇关于Nginx: 反向代理和动静分离概述的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1111144

相关文章

springboot security之前后端分离配置方式

《springbootsecurity之前后端分离配置方式》:本文主要介绍springbootsecurity之前后端分离配置方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的... 目录前言自定义配置认证失败自定义处理登录相关接口匿名访问前置文章总结前言spring boot secu

如何自定义Nginx JSON日志格式配置

《如何自定义NginxJSON日志格式配置》Nginx作为最流行的Web服务器之一,其灵活的日志配置能力允许我们根据需求定制日志格式,本文将详细介绍如何配置Nginx以JSON格式记录访问日志,这种... 目录前言为什么选择jsON格式日志?配置步骤详解1. 安装Nginx服务2. 自定义JSON日志格式各

Nginx指令add_header和proxy_set_header的区别及说明

《Nginx指令add_header和proxy_set_header的区别及说明》:本文主要介绍Nginx指令add_header和proxy_set_header的区别及说明,具有很好的参考价... 目录Nginx指令add_header和proxy_set_header区别如何理解反向代理?proxy

Nginx配置location+rewrite实现隐性域名配置

《Nginx配置location+rewrite实现隐性域名配置》本文主要介绍了Nginx配置location+rewrite实现隐性域名配置,包括基于根目录、条件和反向代理+rewrite配置的隐性... 目录1、配置基于根目录的隐性域名(就是nginx反向代理)2、配置基于条件的隐性域名2.1、基于条件

Ubuntu中Nginx虚拟主机设置的项目实践

《Ubuntu中Nginx虚拟主机设置的项目实践》通过配置虚拟主机,可以在同一台服务器上运行多个独立的网站,本文主要介绍了Ubuntu中Nginx虚拟主机设置的项目实践,具有一定的参考价值,感兴趣的可... 目录简介安装 Nginx创建虚拟主机1. 创建网站目录2. 创建默认索引文件3. 配置 Nginx4

Nginx如何进行流量按比例转发

《Nginx如何进行流量按比例转发》Nginx可以借助split_clients指令或通过weight参数以及Lua脚本实现流量按比例转发,下面小编就为大家介绍一下两种方式具体的操作步骤吧... 目录方式一:借助split_clients指令1. 配置split_clients2. 配置后端服务器组3. 配

Nginx实现前端灰度发布

《Nginx实现前端灰度发布》灰度发布是一种重要的策略,它允许我们在不影响所有用户的情况下,逐步推出新功能或更新,通过灰度发布,我们可以测试新版本的稳定性和性能,下面就来介绍一下前端灰度发布的使用,感... 目录前言一、基于权重的流量分配二、基于 Cookie 的分流三、基于请求头的分流四、基于请求参数的分

一文详解Nginx的强缓存和协商缓存

《一文详解Nginx的强缓存和协商缓存》这篇文章主要为大家详细介绍了Nginx中强缓存和协商缓存的相关知识,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录一、强缓存(Strong Cache)1. 定义2. 响应头3. Nginx 配置示例4. 行为5. 适用场景二、协商缓存(协

Nginx实现高并发的项目实践

《Nginx实现高并发的项目实践》本文主要介绍了Nginx实现高并发的项目实践,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 目录使用最新稳定版本的Nginx合理配置工作进程(workers)配置工作进程连接数(worker_co

Nginx中location实现多条件匹配的方法详解

《Nginx中location实现多条件匹配的方法详解》在Nginx中,location指令用于匹配请求的URI,虽然location本身是基于单一匹配规则的,但可以通过多种方式实现多个条件的匹配逻辑... 目录1. 概述2. 实现多条件匹配的方式2.1 使用多个 location 块2.2 使用正则表达式