Nginx 反向代理,啥是“反向代理“啊,为啥叫“反向“代理?而不叫“正向”代理?它能干哈?

Nginx 反向代理的理解与配置

User
我打包了我的前端vue项目,上传到服务器,在宝塔面板安装了nginx服务,配置了文件 @nginx.txt .运行了项目。
我想清楚,什么是nginx反向代理?是nginx作为一个中介中间件来集中处理来自不同客户端的请求转发给同一个后端服务吗?配置了ngnix文件就是实现了 nginx 反向代理吗?为什么要叫做“反向”代理?是不是和 Java 中 Bean 的“控制反转”异曲同工?


Assistant
好的,我们来详细聊聊 Nginx 反向代理。看到你已经成功部署了 Vue 项目并配置了 Nginx,这很棒!下面我来为你解答关于反向代理的疑问。
1. 什么是 Nginx 反向代理?它像一个中介吗?
可以这么理解!Nginx 反向代理 确实扮演着一个中介服务器的角色。它位于客户端(比如用户的浏览器)和你的后端服务器(运行你的 API 或其他服务的服务器)之间。

  • 工作流程:

    1. 客户端向 Nginx 反向代理服务器发送请求(客户端以为它直接访问的就是目标服务)。

    2. Nginx 接收到请求。

    3. Nginx 根据配置规则,将这个请求转发给内部网络中的一个或多个后端服务器

    4. 后端服务器处理请求,并将响应发送回 Nginx。

    5. Nginx 再将后端服务器的响应返回给客户端。

  • 集中处理请求转发? 对的。从客户端的角度看,它们只与 Nginx 这个“前台”打交道。Nginx 负责将来自不同客户端的请求,根据规则(比如请求的 URL 路径)转发给对应的后端服务。如果你的应用有多个后端服务(比如一个处理用户认证,一个处理订单),Nginx 可以作为统一的入口,将请求精准地分发下去。

2. 配置了 Nginx 文件就是实现了反向代理吗?
是的,你的 Nginx 配置文件 (nginx.txt) 确实实现了反向代理的功能。
关键在于 location 块中的 proxy_pass 指令。我们来看看你的配置:

  • location /api/: 这个块告诉 Nginx,所有以 /api/ 开头的请求,都应该被转发http://IP:8080 这个地址。 $request_uri 会保留原始请求路径(除去 /api/ 前缀,这取决于具体的 proxy_pass 写法和是否有重写规则,不过这里看起来是简单转发)。

  • location /oneapi/: 同样,以 /oneapi/ 开头的请求被转发到本地的 http://127.0.0.1:3000 服务。注意 proxy_pass http://127.0.0.1:3000/; 末尾的斜杠 / 很重要,它通常意味着 Nginx 会将匹配 /oneapi/ 的部分去除,然后将剩余路径附加到目标 URL 后面。

  • location ^~ /static/: 以 /static/ 开头的请求(^~ 表示优先匹配且停止后续正则匹配)被转发http://127.0.0.1:3000。这里 proxy_pass http://127.0.0.1:3000; 末尾没有斜杠,通常意味着 Nginx 会将完整的 /static/... 路径附加到目标 URL 后面。

这些 proxy_pass 指令正是实现反向代理的核心。同时,Nginx 还直接处理了静态文件(如 index.html.js, .css 等),这也是反向代理服务器常见的职责之一(动静分离)。
3. 为什么叫做“反向”代理?
这个“反向”是相对于**“正向代理”**而言的。

  • 正向代理 (Forward Proxy):

    • 代理的是客户端。 它位于客户端目标服务器之间。

    • 客户端明确知道自己在通过一个代理服务器去访问外部网络。客户端需要进行配置才能使用正向代理。

    • 主要目的是为了客户端服务,例如:访问内部网络无法直接访问的资源(科学上网)、缓存、访问控制等。

    • 服务器不知道实际的客户端是谁,只知道是代理服务器在请求。

    • 例子: 公司内部员工通过公司代理服务器访问互联网。

  • 反向代理 (Reverse Proxy):

    • 代理的是服务器。 它位于客户端和**源服务器(组)**之间。

    • 客户端不知道自己访问的是代理服务器,以为它就是真正的目标服务器。客户端无需任何配置。

    • 主要目的是为了服务器服务,例如:负载均衡、SSL 加密/解密、缓存静态内容、安全防护(隐藏后端服务器 IP)、统一入口等。

    • 服务器知道请求来自反向代理(可以通过特定 Header 获取真实客户端 IP)。

    • 例子: 你现在的 Nginx 配置就是典型的反向代理,保护和管理你的后端 API 服务 (:8080) 和 OneAPI 服务 (:3000)。

简单来说:

  • 正向代理:“代客上网”,替客户端访问服务器。

  • 反向代理:“前台接待”,替服务器接收客户端请求。

4. 和 Java Bean 的“控制反转 (IoC)”异曲同工?
这是一个有趣的类比!可以说它们在思想层面有相似之处,即责任的转移控制权的转移,但它们应用的领域和解决的问题是完全不同的。

  • 控制反转 (Inversion of Control, IoC):

    • 领域: 软件设计、对象之间的依赖关系管理。

    • 核心思想: 将创建和管理对象(Bean)的控制权,从代码本身(比如 new MyObject()) 反转给一个外部容器(如 Spring 框架)。程序员不再直接控制对象的创建和依赖注入,而是由容器来负责。

    • 目的: 解耦组件、提高代码的可测试性、可维护性和灵活性。

  • 反向代理:

    • 领域: 网络架构、请求路由和服务器管理。

    • 核心思想: 将处理客户端直接请求的责任,从后端服务器转移给反向代理服务器。客户端不直接与后端服务器交互。

    • 目的: 负载均衡、安全、性能优化(缓存、SSL)、简化部署等。

相似点(抽象层面):

  • 引入中介/容器: 两者都引入了一个中间层(反向代理服务器 / IoC 容器)。

  • 责任/控制权转移: 都将某些责任或控制权从原始参与者(后端服务器 / 业务代码)转移给了这个中间层。

不同点(具体实现和目的):

  • 应用层次: IoC 是在代码和对象层面,反向代理是在网络请求和服务器层面。

  • 解决的问题: IoC 解决的是软件内部组件耦合问题,反向代理解决的是网络流量管理、安全和性能问题。

所以,可以说它们都体现了“将控制权/责任交给别人”的设计思想,在这个抽象层面上是“异曲同工”的。但它们是不同领域解决不同问题的具体技术和模式。
总结一下:
你通过配置 Nginx 的 proxy_pass 成功实现了反向代理。它就像一个聪明的“前台”,帮你接收所有外部请求,然后根据规则转发给后端的不同服务(你的 API 服务、OneAPI 服务),同时还能直接处理静态文件请求。这个“反向”是相对于替客户端代理的“正向”而言的。它和 IoC 在“控制权转移”这个抽象概念上有点类似,但本质上是完全不同的技术。

下一篇

  • 关于nginx,负载均衡是什么?它能给我们的业务带来什么?怎么去配置它?-CSDN博客

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

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

相关文章

用 Python 打造打篮球字符动画!控制台彩色炫酷输出,抖音搞怪视频灵感还原

一、引言:从抖音搞怪视频到 Python 字符动画的奇妙之旅 刷抖音时刷到一个神级操作 —— 博主用 01 数字矩阵还原了明星打篮球的经典画面,字符在控制台随动作节奏炫彩跳动,瞬间点燃了技术宅的 DNA!作为 Python 图像处理爱好者&…

《逐梦九天:中国航天编年史》

《逐梦九天:中国航天编年史》 新华社酒泉2025年4月24日电(记者李国利、黄一宸)神舟二十号载人飞船发射4月24日取得圆满成功,中国载人航天在“东方红一号”发射55载之际开启第20次神舟问天之旅。 当日17时17分,搭载神舟二十号载人飞船的长征二号F遥二十运载火箭在酒泉卫星…

IDEA搭建环境的五种方式

一、普通的java项目 File--New--Project 选择Java,jdk选择1.8版本,然后点next 输入项目名和路径名,点击Finish 创建包结构,编写Class类 编写主方法,输出Hello标志完成 二、普通的javaWeb项目 Java Enterprise-- 勾选…

【黑马 微服务面试篇】

分布式事务 cap定理-Availability CAP定理-Partition tolerance BASE理论 BASE理论是对CAP的一种解决思路,包含三个思想: BasicallyAvailable(基本可用):分布式系统在出现故障时,允许损失部分可用性&#…

实时数仓体系概览与架构演进

✨ 引言:为什么我们离不开“实时” 曾经的你可能会认为“数据分析一天一更,够用了”。但当你所在的公司遇上这些情况: 用户在投放广告后5分钟内就想知道转化效果 风控平台必须秒级判断是否拦截订单 新产品上线后一小时就需调整推荐算法策略…

基于Matlab的车牌识别系统

1.程序简介 本模型基于MATLAB,通过编程创建GUI界面,基于Matlab的数字图像处理,对静止的车牌图像进行分割并识别,通过编写matlab程序对图像进行灰度处理、二值化、腐蚀膨胀和边缘化处理等,并定位车牌的文字,实现字符的…

JAVA---面向对象(下)

重生之我开始补知识第三集 1.标准 JavaBean 要求: 1)类名需要见名知意 2)成员变量使用private修饰 3)至少提供两个构造方法 a.无参构造方法 b.带全部参数的构造方法 4)成员方法 a.提供每一个成员变量对应的 …

信奥赛CSP-J复赛集训(DP专题)(24):P1977 出租车拼车

信奥赛CSP-J复赛集训(DP专题)(24):P1977 出租车拼车 题目背景 话说小 x 有一次去参加比赛,虽然学校离比赛地点不太远,但小 x 还是想坐出租车去。大学城的出租车总是比较另类,有“拼…

Windows申请苹果开发者测试证书Uniapp使用

注意事项 苹果设备,最好是iPhone XS以上,要不然下载不了Apple DeveloperopenSSL 要是V1版本的来生成证书,要不然HBuilder报错按步骤来,生成证书,生成标识符,添加测试设备,生成描述性文件注册苹果开发者账号 (如果有苹果账号直接登录) 苹果开发者官网 开通付费 点击右上…

dockercompose文件仓库

mysql version: 3 # 使用docker-compose的版本,根据需要可以调整# 创建数据目录 # mkdir -p /home/docker/mysql/mysql_data # mkdir -p /home/docker/mysql/mysql_logs # 给予适当的权限(确保MySQL容器可以读写这些目录) # chmod 777 /ho…

【Linux】47.高级IO(1)

文章目录 1. 高级IO1.1 五种IO模型1.2 高级IO重要概念1.2.1 同步通信 vs 异步通信1.2.2 阻塞 vs 非阻塞 1.3非阻塞IO1.3.1 fcntl1.3.2 实现函数SetNoBlock1.3.3 轮询方式读取标准输入1.3.4 I/O多路转接之select1.3.4.1 初识select:1.3.4.2 select函数原型1.3.4.3 理…

【Vulkan 入门系列】创建帧缓冲、命令池、命令缓存,和获取图片(六)

这一节主要介绍创建帧缓冲(Framebuffer),创建命令池,创建命令缓存,和从文件加载 PNG 图像数据,解码为 RGBA 格式,并将像素数据暂存到 Vulkan 的 暂存缓冲区中。 一、创建帧缓冲 createFramebu…

ubuntu的普通用户相关配置

1.切换到普通用户下,不出现,用户名主机ip, 环境变量被破坏, 参考:一文教你快速修改ubuntu终端显示的主机名和用户名_ubuntu终端名称-CSDN博客 2.如果登陆进去无法使用ls,cd,vi等命令 2.1 环境变量 如果 PATH 被清空…

腾讯云×数语科技:Datablau DDM (AI智能版)上架云应用!

在数据爆炸式增长的时代,传统的数据建模方式已难以满足企业对敏捷性、智能化、自动化的需求。数语科技联合腾讯云推出的 Datablau DDM 数据建模平台(AI智能版),基于AI语义建模技术,深度融合腾讯混元大模型能力&#xf…

Spark-streaming(一)

Spark-Streaming概述 Spark Streaming 用于流式数据的处理。 和 Spark 基于 RDD 的概念很相似,Spark Streaming 使用离散化流(discretized stream)作为抽象表示,叫作 DStream。 DStream 是随时间推移而收到的数据的序列。 Spark-Streaming的特点&…

CS144 Lab 6 实战记录:构建 IP 路由器

1 实验背景与目标 在 CS144 的 Lab 6 中,我们需要在之前实现的 NetworkInterface(Lab 5)基础上构建一个完整的 IP 路由器。路由器的主要任务是根据路由表将接收到的 IP 数据报转发到正确的网络接口,并发送给正确的下一跳&#xf…

【网络安全】社会工程学策略

1. 社会工程学简介 社会工程攻击是威胁行为者常用的攻击方式。这是因为,诱骗人们提供访问权限、信息或金钱通常比利用软件或网络漏洞更容易。 您可能还记得,社会工程学是一种利用人为错误来获取私人信息、访问权限或贵重物品的操纵技术。它是一个涵盖性…

【含文档+PPT+源码】基于SpringBoot的开放实验管理平台设计与实现

项目介绍 本课程演示的是一款基于SpringBoot的开放实验管理平台设计与实现,主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的 Java 学习者。 1.包含:项目源码、项目文档、数据库脚本、软件工具等所有资料 2.带你从零开始部署运行本套系统…

鸿蒙NEXT开发定位工具类 (WGS-84坐标系)(ArkTs)

import geoLocationManager from ohos.geoLocationManager; import { BusinessError, Callback } from ohos.base; import { LogUtil } from ./LogUtil; import { PermissionUtil } from ./PermissionUtil; import { map, mapCommon } from kit.MapKit; /*** 定位工具类 (WGS-8…

SSM从入门到上手-全面讲解SSM框架的使用.

一、SSM框架整合 将Spring、Spring MVC和MyBatis结合在一起,形成一个高效且易于维护的Web应用程序架构。具体整合的方式如下: Spring管理Bean:Spring负责管理所有的Java对象,包括Service层、DAO层等。通过Spring的IoC容器进行依赖…