好问题 👍。
Nginx 正向代理 (Forward Proxy) 和 反向代理 (Reverse Proxy) 经常让人搞混,我给你拆开解释,并画出对比图。
1. 正向代理(Forward Proxy)
-
位置:在 客户端 和 目标服务器 之间。
-
作用:客户端通过代理访问外网,目标服务器并不知道真正的客户端是谁。
-
典型用途:
- 科学上网 / VPN(隐藏客户端真实 IP,突破访问限制)。
- 内网统一出口访问互联网。
- 做缓存,提高访问速度。
-
特点:
- 客户端必须配置代理(比如浏览器里设置代理地址)。
- 代理代表客户端去访问外部资源。
图示:
[Client] ---> [Forward Proxy: Nginx] ---> [Internet Server]
2. 反向代理(Reverse Proxy)
-
位置:在 客户端 和 内部服务器 之间。
-
作用:客户端以为自己访问的是代理,其实请求被转发给了后端真实服务器。
-
典型用途:
- 负载均衡(Nginx 把请求分发到多台后端)。
- 统一入口(隐藏真实服务器,保护安全)。
- SSL 终止(由 Nginx 处理 HTTPS,再转发给后端)。
-
特点:
- 客户端 不需要配置代理,只访问代理的地址即可。
- 后端服务器对客户端是透明的。
图示:
[Client] ---> [Reverse Proxy: Nginx] ---> [Internal Server(s)]
3. 核心区别对比
| 项目 | 正向代理 | 反向代理 |
|---|---|---|
| 面向对象 | 客户端 | 服务器 |
| 客户端是否需配置 | 需要 | 不需要 |
| 主要用途 | 客户端访问外网、突破限制、隐藏客户端 | 负载均衡、安全防护、隐藏后端 |
| 真实 IP 隐藏 | 隐藏客户端 | 隐藏服务器 |
4. Nginx 配置示例
正向代理(forward proxy)
(要在 nginx.conf 中开启 CONNECT 支持)
server {
listen 8888;
resolver 8.8.8.8;
location / {
proxy_pass $scheme://$http_host$request_uri;
proxy_set_header Host $http_host;
}
}
- 客户端要在浏览器里设置:代理地址 =
http://nginx服务器:8888。
反向代理(reverse proxy)
server {
listen 80;
server_name mysite.com;
location / {
proxy_pass http://127.0.0.1:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
- 用户访问
http://mysite.com,Nginx 把请求转发到本地8080的服务。