Nginx中正向代理,反向代理,负载均衡

1. 🔄 反向代理

情景:

顾客想买手机,他走到购物中心前台问:"手机店在哪?"

前台说:"您稍等,我帮您联系",然后前台去后面的手机店取来手机交给顾客。

技术解释:

  • 顾客不知道后面有多少家手机店,也不知道具体是哪家为他服务

  • 前台(Nginx)代表后面的店铺(服务器)为顾客服务

  • 客户不知道真正的服务提供者

    Nginx 配置示例

    server {
    listen 80;
    server_name shopping-mall.com;

    复制代码
      location /phone-shop/ {
          # 将请求转发给后端的手机店
          proxy_pass http://real-phone-shop:8080;
      }
      
      location /clothing-shop/ {
          # 将请求转发给后端的服装店
          proxy_pass http://real-clothing-shop:8081;
      }

    }

特点: 隐藏真实服务器,保护后端,统一入口

2. 🎯 正向代理

情景:

顾客想访问一个被限制的国外网站(比如某些外网),但他无法直接访问。

于是他找了一个"代理服务"(比如VPN),让代理帮他去访问那个网站,然后把内容传回来。

技术解释:

  • 顾客主动使用代理

  • 网站不知道真正的访问者是谁,只知道代理在访问它

  • 服务器不知道真正的客户端

    正向代理配置(Nginx 也可以做,但较少用)

    server {
    listen 3128; # 代理端口
    resolver 8.8.8.8;

    复制代码
      location / {
          # 允许客户端通过此服务器访问外部网络
          proxy_pass http://$http_host$request_uri;
      }

    }

特点: 突破访问限制,隐藏客户端身份

3. ⚖️ 负载均衡

情景:

购物中心有三家一模一样的手机店(卖同样商品)。

前台看到很多顾客都要买手机,于是:

  • 把第一个顾客指引到1号店

  • 把第二个顾客指引到2号店

  • 把第三个顾客指引到3号店

  • 把第四个顾客又指引到1号店...

技术解释:

  • 将大量请求分配到多个相同的服务器上

  • 避免单个服务器过载

  • 提高整体处理能力

    Nginx 负载均衡配置

    upstream phone_shops {
    # 定义三家手机店(后端服务器)
    server 192.168.1.101:8080 weight=3; # 权重3,处理更多请求
    server 192.168.1.102:8080 weight=2; # 权重2
    server 192.168.1.103:8080 weight=1; # 权重1
    }

    server {
    listen 80;
    server_name shopping-mall.com;

    复制代码
      location /phone-shop/ {
          # 将请求负载均衡到三家店
          proxy_pass http://phone_shops;
      }

    }

特点: 分摊压力,提高可用性,扩展性


🎯 一句话总结

概念 谁被代理? 为谁服务? 一句话理解
反向代理 服务器 客户端 "帮服务器接客" - 客户找代理,代理找真服务器
正向代理 客户端 客户端 "帮客户跑腿" - 客户让代理去访问目标
负载均衡 多个服务器 系统整体 "客流分配员" - 把客户平均分给多个服务点

🔧 实际应用场景

反向代理常见用途:

  • 网站入口网关

  • API 网关

  • SSL 终端(HTTPS解密)

正向代理常见用途:

  • 公司内网代理

  • 科学上网工具

  • 内容过滤

负载均衡常见用途:

  • 电商网站大促时

  • 高流量应用

  • 微服务架构

相关推荐
Java后端的Ai之路4 分钟前
Java并发编程07-等待通知机制优化循环等待
java·数据库·python
Raas10010 分钟前
AI网关如何接入?MAI Gateway部署实操教程
java·开发语言·人工智能·gateway·ai网关·mai gateway·企业级产品
前端双越老师20 分钟前
程序员 1v1 访谈系列第十一期:应届生别做开发
java·agent·ai编程
Captain1314_李祖团25 分钟前
5. MLIR相关语法
java·前端·javascript
Rain的Java大神之路28 分钟前
面试官让你把 LLM、RAG、Agent、MCP 串起来讲清楚,90% 的 Java 工程师当场露馅
java·后端·面试
无所谓^_^1 小时前
个人健康管理系统 | Springboot3 | Vue3
java·vue·毕业设计·springboot·课程设计·毕设·前后端分离
杨凯凡1 小时前
Spring Boot 的 @Transactional 为什么会失效?从代理、自调用到异常回滚的排查实战
java·spring boot·spring·事务·后端开发
曼岛_1 小时前
[图解密码学]第5章 对称加密基础
java·数据库·密码学
天河归来11 小时前
第三方接口不稳定,如何让核心任务继续完成
java·大数据
Knight_AL12 小时前
Java 文件下载时文件名中的 `#` 被转换成 `%23`?一次 URL 编码与解码问题排查
java·开发语言