欢迎光临
我们一直在努力

Nginx 正向代理和反向代理有什么区别?从请求方向讲清楚

很多技术概念,越是基础,越容易在现场被用乱。

Nginx 正向代理和反向代理就是其中一个。

有人把网站转发叫正向代理,有人把采集代理也叫 Nginx 反代。单独看“代理”两个字,确实容易混。但只要回到请求方向,问题就很清楚。

我自己的判断标准很简单:

请求从客户端往外走,用正向代理;请求从外部进入服务端,用反向代理。

先看正向代理

正向代理是客户端侧的代理。

它的结构是:

text复制

客户端 → 代理服务器 → 外部目标站点

客户端本来要访问目标站点,但它不直接访问,而是先把请求交给代理服务器。

目标站点收到请求时,看到的是代理服务器发来的请求。

所以正向代理解决的是“客户端怎么访问外部资源”的问题。

常见例子有:

  • 内网机器需要访问外部网站;
  • 开发机要临时访问某些外部接口;
  • 采集程序需要统一出口;
  • 企业网关需要记录员工访问日志;
  • 客户端想隐藏真实访问来源。

这类场景里,代理是客户端主动使用的工具。

再看反向代理

反向代理是服务端侧的代理。

它的结构是:

text复制

用户 → Nginx → 后端应用

用户访问的是 Nginx,对后端应用没有直接感知。

比如后端服务实际跑在:

text复制

127.0.0.1:8080

但用户访问的是:

text复制

https://www.example.com

中间就是 Nginx 在转发。

反向代理解决的是“外部请求怎么进入后端服务”的问题。

常见例子有:

  • Web 服务对外发布;
  • 前后端分离项目部署;
  • 多个后端服务共用一个域名;
  • HTTPS 证书统一放在 Nginx;
  • 多台后端机器做负载分发;
  • 静态资源和动态接口分开处理。

反向代理通常由服务端部署方配置,用户一般不知道后面发生了什么。

一个生活化类比

可以把正向代理理解成“代购”。

你想买一个东西,但你不直接去买,而是让代购替你去买。商家看到的是代购,不是你。

这就是正向代理。

反向代理更像“前台”。

客户来到公司,不会直接找后面的工程师、财务、销售,而是先找前台。前台再把人转给对应部门。

这就是反向代理。

一个替客户端出去,一个替服务端接待。

配置上的差异

反向代理在 Nginx 里非常常见:

nginx复制

server {
listen 80;
server_name api.example.com;

location / {
proxy_pass http://127.0.0.1:8080;

proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}

这个配置里,用户访问 api.example.com,Nginx 把请求转给后端 8080 服务。

如果后面有多台服务,可以这样写:

nginx复制

upstream backend {
server 10.0.0.1:8080;
server 10.0.0.2:8080;
}

server {
listen 80;
server_name api.example.com;

location / {
proxy_pass http://backend;
}
}

这就是典型反向代理加负载分发。

正向代理也可以用 Nginx 做简单 HTTP 示例:

nginx复制

server {
listen 8888;
resolver 8.8.8.8;

location / {
proxy_pass http://$http_host$request_uri;
}
}

但要注意,Nginx 原生对完整 HTTPS 正向代理支持并不舒服。浏览器访问 HTTPS 网站时,常见方式是 CONNECT 隧道,这通常需要第三方模块或专门代理服务。

排障时怎么判断

我通常问三个问题。

第一,代理是谁主动使用的?

如果是客户端主动配置代理地址,是正向代理。

如果是域名解析到 Nginx,再由 Nginx 转到后端,是反向代理。

第二,代理隐藏了谁?

隐藏客户端,是正向代理。

隐藏后端服务,是反向代理。

第三,流量方向是什么?

客户端往外访问,是正向代理。

外部用户访问内部服务,是反向代理。

这三个问题一问,基本不会混。

常见误区

误区一:Nginx 只要用了 proxy_pass,就是反向代理。

不对。proxy_pass 是转发指令,不是概念判断依据。

误区二:反向代理会影响真实用户 IP。

会影响,但可以处理。关键是正确配置 X-Real-IP 和 X-Forwarded-For,后端也要按可信代理读取。

误区三:正向代理和反向代理只是名字不同。

不是名字不同,而是控制方不同、隐藏对象不同、使用场景不同。

最后总结

正向代理和反向代理的区别,可以压缩成两句话:

正向代理:客户端找代理,替自己访问外部资源。
反向代理:服务端放代理,替后端接收外部请求。

如果你是在部署网站、API、后台系统,十有八九是在用 Nginx 做反向代理。

如果你是在处理统一出口、采集访问、外部接口请求,那更接近正向代理。

方向判断清楚,配置才不会写反。

赞(0)
未经允许不得转载:171主机测评 » Nginx 正向代理和反向代理有什么区别?从请求方向讲清楚
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址