05、Nginx反向代理

news2024/11/26 15:25:25

一、网关、代理与反向代理:

在Nginx中,网关、代理和反向代理是三种常见的功能,用于转发和处理请求。下面是它们的简要介绍:

  1. 网关(Gateway): 网关在网络通信中起到中介的作用,将客户端请求转发到其他服务器或应用程序。Nginx可以作为网关来处理不同类型的请求,并将其转发到适当的后端服务器。例如,Nginx可以充当HTTP请求的网关,将请求转发给HTTP服务器或应用程序。
  2. 代理(Proxy): 代理是指Nginx将客户端的请求转发给其他服务器,同时返回响应给客户端。Nginx可以作为正向代理,代表客户端向其他服务器发起请求。当客户端发送请求到Nginx时,Nginx将请求转发给目标服务器,接收响应后再将其返回给客户端。这样客户端与目标服务器之间的通信对于目标服务器来说是透明的,客户端只与Nginx进行通信。
  3. 反向代理(Reverse Proxy): 反向代理是指Nginx接收客户端的请求,并将请求转发给多个后端服务器中的一个。客户端不知道真正提供服务的是哪个服务器,因为它只与Nginx进行通信。Nginx根据特定的负载均衡算法(如轮询、IP哈希、权重等)选择一个后端服务器,并将请求转发到该服务器上。反向代理常用于负载均衡、缓存、SSL终止等场景。

无论是代理还是反向代理,Nginx提供了强大而灵活的功能来转发请求并管理服务器集群,以实现更高的性能和可靠性。通过适当的配置,可以根据需求将请求转发到不同的后端服务器,并应用额外的功能,如请求修改、缓存、安全策略等。

在这里插入图片描述

二、反向代理在系统架构中的应用场景:

Nginx反向代理在系统架构中有多种应用场景,以下是一些常见的应用场景:

  1. 负载均衡:Nginx反向代理可以作为负载均衡器,将客户端请求均匀地分发给多个后端服务器,以提高系统的可伸缩性和性能。通过使用不同的负载均衡算法,如轮询、IP哈希、权重等,可以根据服务器的负载情况进行请求的分发。
  2. 高可用性和故障转移:通过在Nginx反向代理前面设置多个后端服务器,当其中一个后端服务器发生故障时,Nginx可以自动将请求转发给其他健康的服务器,实现故障转移和高可用性。这种架构可以确保系统在单个服务器出现故障时继续正常运行。
  3. SSL终止:Nginx反向代理可以用作SSL终止点,负责处理客户端和服务器之间的SSL/TLS加密通信。它接收加密的HTTPS请求,并将请求解密后转发给后端的HTTP服务器。这样可以减轻后端服务器的负担,并提供更高的性能和灵活性。
  4. 缓存加速:Nginx反向代理可以用作缓存服务器,缓存静态内容或动态内容的结果,以提供更快的响应速度。它可以根据缓存策略缓存响应,并在后续的请求中直接返回缓存的响应,减少对后端服务器的请求,提高系统的性能和扩展性。
  5. 安全防护:Nginx反向代理可以提供安全防护功能,例如限制请求频率、过滤恶意请求、防止DDoS攻击等。通过在反向代理层进行请求过滤和安全策略设置,可以减轻后端服务器的负担,增加系统的安全性和稳定性。

这些是Nginx反向代理在系统架构中常见的应用场景。根据具体的需求和系统架构,还可以结合其他功能和模块,进行更复杂和定制化的配置,以满足特定的业务需求。

在这里插入图片描述

三、Nginx的反向代理配置:

配置Nginx作为反向代理非常简单。下面是一个基本的Nginx反向代理配置示例:

http {
    upstream backend {
        server backend1.example.com;
        server backend2.example.com;
        server backend3.example.com;
    }

    server {
        listen 80;
        server_name example.com;

        location / {
            proxy_pass http://backend;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
        }
    }
}

在上述示例中:

  1. upstream 块定义了后端服务器的列表,通过指定服务器的地址或域名来定义多个后端服务器。
  2. server 块定义了监听的端口和域名。
  3. location / 块是针对根路径 / 的请求进行配置。proxy_pass 指令将请求转发到名为 backend 的 upstream 块中定义的后端服务器组。
  4. proxy_set_header 指令用于设置请求头,将原始请求的主机和真实 IP 地址传递给后端服务器。

需要根据实际情况修改示例中的域名、后端服务器地址和其他配置参数。你可以根据需要在 location 块中添加更多的指令来定制请求转发的行为,如缓存设置、请求限速等。

完成配置后,重新加载或重启 Nginx 使其生效。之后,Nginx 将根据配置将请求转发到后端服务器,并将响应返回给客户端。

四、基于反向代理的负载均衡器:

Nginx可以作为基于反向代理的负载均衡器,将客户端的请求均匀地分发给多个后端服务器,以提高系统的性能和可伸缩性。下面是一个简单的示例配置:

http {
    upstream backend {
        server backend1.example.com;
        server backend2.example.com;
        server backend3.example.com;
    }

    server {
        listen 80;
        server_name example.com;

        location / {
            proxy_pass http://backend;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
        }
    }
}

在上述示例中:

  1. upstream 块定义了一个名为 backend 的 upstream 组,其中列出了多个后端服务器的地址或域名。你可以根据实际情况添加或删除后端服务器。
  2. server 块定义了监听的端口和域名。
  3. location / 块是针对根路径 / 的请求进行配置。proxy_pass 指令将请求转发到名为 backend 的 upstream 组中的后端服务器。
  4. proxy_set_header 指令用于设置请求头,将原始请求的主机和真实 IP 地址传递给后端服务器。

通过上述配置,Nginx将根据配置中定义的负载均衡算法(默认为轮询)将请求均匀地分发给后端服务器。如果一个后端服务器不可用,Nginx会自动将请求转发给其他健康的服务器。

你可以根据实际需求进行更高级的负载均衡配置,如权重分配、IP哈希、最少连接数等。可以通过指定不同的 upstream 组来为不同的服务或路径配置不同的负载均衡规则。

完成配置后,重新加载或重启 Nginx 使其生效。Nginx将作为负载均衡器将请求转发到后端服务器,以实现负载均衡和高可用性。

五、负载均衡策略:

Nginx提供了多种负载均衡策略,你可以根据实际需求选择适合的策略。以下是一些常见的负载均衡策略:

  1. 轮询(Round Robin): 默认的负载均衡策略,Nginx将按照顺序将请求依次分配给后端服务器。每个后端服务器将依次接收请求,然后循环到第一个服务器。适用于后端服务器的处理能力相对均衡的情况。
  2. IP哈希(IP Hash): 根据客户端的IP地址对请求进行哈希计算,并将请求发送到相应的后端服务器。这种策略确保相同IP地址的客户端始终被发送到相同的后端服务器,适用于需要保持会话一致性的应用场景。
  3. 最少连接数(Least Connections): Nginx会根据后端服务器当前的连接数选择连接数最少的服务器来处理请求。这种策略可以有效地将负载分配给连接较少的服务器,适用于后端服务器的处理能力不均衡的情况。
  4. 权重(Weighted): 可以为每个后端服务器分配一个权重值,根据权重值来决定请求的分配比例。具有较高权重的服务器将接收到更多的请求,适用于后端服务器的处理能力不一致的情况。
  5. URL哈希(URL Hash): 根据请求的URL进行哈希计算,并将请求发送到相应的后端服务器。这种策略确保相同URL的请求始终被发送到相同的后端服务器,适用于需要保持特定请求的一致性的应用场景。

可以通过在Nginx的upstream配置中使用相应的策略指令来设置负载均衡策略,例如:

upstream backend {
    ip_hash;
    server backend1.example.com;
    server backend2.example.com;
}

在上述示例中,ip_hash指令设置使用IP哈希策略,确保相同IP地址的客户端请求被发送到相同的后端服务器。

根据实际需求,你可以根据负载情况和系统要求选择适当的负载均衡策略,或者通过组合不同的策略来实现更复杂的负载均衡配置。

先赞后看,养成习惯!!!^ _ ^ ❤️ ❤️ ❤️
码字不易,大家的支持就是我的坚持下去的动力。点赞后不要忘了关注我哦!

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

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

相关文章

【视觉SLAM入门】1. 基础知识,运动观测,旋转(旋转矩阵,轴角,欧拉角,四元数)和eigen库基础

"山薮藏疾" 1. 运动与观测1.1 通用运动方程1.2 通用观测方程1.3 对SLAM的认识 2. 三维运动2.1 旋转与平移2.2 变换矩阵2.3 矩阵知识补充2.4 旋转向量2.5 欧拉角2.6 四元数2.7 其他变换 3. 编程基础3.1 链接库说明3.2 eigen库 注: 以后的方程中如未说明&am…

面试官:一千万的数据,要怎么查?

一个老生常谈的问题,SELECT *和SELECT具体字段那个快?在数据量少的时候可能没什么差别,但是数据量达到千万级,差距就显现出来。废话不多说,往下看 ↓。 SELECT * 和 SELECT 具体字段的区别 在 MySQL 中,SE…

批量规范化

✨✨✨ 感谢优秀的你打开了小白的文章 “希望在看文章的你今天又进步了一点点,生活更加美好!”🌈🌈🌈 目录 1.批量规范化基本原理 2.批量规范化的使用 2.1对于全连接层 2.2对于卷积层 3.代码实现 3.1方式一 …

26488-24-4,Cyclo(D-Phe-L-Pro),具有良好的生物相容性

资料编辑|陕西新研博美生物科技有限公司小编MISSwu​ 【产品描述】 Cyclo(D-Phe-L-Pro)环(D-苯丙氨酸-L-脯氨酸),环二肽是由两个氨基酸通过肽键环合形成,是自然界中小的环状肽。由于其存在两个酰胺键即四个可以形成氢键的位点,环二肽可以在氢…

商业海外社交媒体营销10步指南 [2023]

如今,社交媒体是任何成功商业战略的重要组成部分。这不是奢侈品,而是必需品。全球有超过 36 亿人使用社交媒体,它是企业展示其产品和服务、建立品牌知名度以及与客户联系的数字游乐场。 但这不仅仅是娱乐和游戏。要在社交媒体上取得成功&…

Golang每日一练(leetDay0114) 矩阵中的最长递增路径、按要求补齐数组

目录 329. 矩阵中的最长递增路径 Longest Increasing Path In A Matrix 🌟🌟 330. 按要求补齐数组 Patching Array 🌟🌟 🌟 每日一练刷题专栏 🌟 Rust每日一练 专栏 Golang每日一练 专栏 Python每日…

数据结构--二叉树的性质

数据结构–二叉树的性质 二叉树常考性质 常见考点1: 设非空二叉树中度为0、1和2的结点个数分别为 n 0 、 n 1 和 n 2 ,则 n 0 n 2 1 n_0、n_1和n_2,则n_0 n_2 1 n0​、n1​和n2​,则n0​n2​1 n 0 n 2 1 \color{red}n_0 n_2 1 n0​n2​…

图层中大型数据集的分块处理思路

图层中大型数据集的分块处理思路 为改善要素叠加工具(如联合和相交)的性能和可伸缩性,软件采用了称为自适应细分处理的运算逻辑。当可用的物理内存不足以对数据进行处理时,就会触发系统使用此逻辑。由于保持在物理内存的可用范围…

助力企业完成等保2.0的重要工具

在当今数字化时代,企业面临着越来越多的网络安全威胁和数据泄露风险。为了保护敏感信息和维护业务的连续性,许多企业正在积极采取措施来实施等保2.0标准。在这一过程中,EventLog Analyzer作为一种全面的安全信息与事件管理解决方案&#xff0…

swagger2word使用(将swagger2转化为word)

开源项目地址 https://github.com/JMCuixy/swagger2word 项目使用 1、项目拉下来以后先修改application.xml配置文件红框内容,将其修改为要换为自己swagger文档的地址 2、运行项目后输入地址http://127.0.0.1:8080/toWord 即可下载word文档

结构体和数据结构--共用体

共用体,也称联合(Union),是将不同类型的数据组织在一起共同占用同一段内存的一种构造数据类型。共用体与结构体的类型声明方法类似,只是关键字变为了Union。 例题:演示共用体所占内存字节数的计算方法 #i…

如何用手机制作3D人物模型素材

3D人物模型素材是现代3D游戏和电影制作中必不可少的一部分。它们是数字艺术家和设计师们用来创造逼真世界的关键。3D人物模型素材是用计算机程序制作的虚拟人物,可以被用于电影、电视、游戏和虚拟现实应用中。它们可以被用来代替实际演员,也可以被用来创…

小程序蓝牙通信

蓝牙通信能力封装 一开始是根据uniapp提供的蓝牙api写的蓝牙方法,之后发现复用性,以及一些状态的监听存在缺陷,之后整理成了类。这样复用性以及状态监听的问题就解决了。 蓝牙组件 创建蓝牙组件的类 单例模式是为了保证蓝牙长连接&#xff0…

前端(一)——前端开发遇到的普遍问题以及解决策略

😄博主:小猫娃来啦 😄文章核心:前端开发遇到的普遍问题以及解决策略 前端十万个为什么? 有人说vue框架是基于mvvm实现的?这种说法对吗? mvc和mvvm的区别是什么? mvvm是否是mvc的升…

内容文本生成二维码用excel表格导出(java)

内容文本生成二维码用excel表格导出(java) //若有问题可留言 效果如下: import java.io.ByteArrayOutputStream; import java.io.FileOutputStream; import java.util.Arrays; import java.util.HashMap; import java.util.List; import java.util.Map;import org.apache.po…

大厂股权就是这么“坑”,150万股票到账前被优化,损失惨重

某网友发文称:“自己还有47天就可以解锁股权,到时就有150万的股票到账,结果接到公司裁员通知,实在是淌血,我能反抗吗?” 对这我只能说,公司卡的就是这个点。所以大家在找工作的时候,…

SparkJDBC性能优化指南

前言 本文以Mysql为例。Spark作为一种强大且广泛应用于大数据处理的分布式计算框架,有着出色的性能和可伸缩性。在使用Spark处理大规模数据时,往往需要与关系型数据库MySQL进行交互。然而,由于MySQL和Spark本身的特性之间存在一些差异,直接使用Spark读写MySQL的默认配置可…

SQL 查找重复的电子邮箱

SQL 182 查找重复的电子邮箱 SQL架构 表: Person -------------------- | Column Name | Type | -------------------- | id | int | | email | varchar | -------------------- id 是该表的主键列。 此表的每一行都包含一封电子邮件。电子邮件不包含大写字母。 编写一个 SQ…

线性DP-入门篇

目录 数字三角形: 最长上升子序列: 魔族密码: 编辑距离: 线性动态规划的主要特点是状态转移的推导是按照问题规模 从小到大依次推导,较大规模的问题的解依赖较小规模的问题的解。 数字三角形: [USA…

大模型是什么

在计算机领域,大模型’是一个近年来备受关注的词汇。这篇文章旨在带你遨游大模型的世界,了解它们的特点、优缺点,以及需如何有效地利用它们。我们还会探讨一些具体的大模型实例,并分析其对人类社会的影响。 首先,我们…