Appearance
正向代理和反向代理
提示
来自deepseek解释
理解 Nginx 中的正向代理和反向代理,关键是分清“代理”服务的对象是谁。
用一句通俗的话总结:
- 正向代理:代理的是客户端,帮客户端去访问它自己访问不了的服务器。
- 反向代理:代理的是服务器,帮服务器接收客户端请求并分发到后端。
下面分别详细说明。
1. 正向代理
场景类比:
你想去外网查资料,但公司网络禁止直接访问外网。你找一台可以访问外网的“跳板机”,把请求发给它,它帮你取回数据。这台跳板机就是正向代理服务器。
Nginx 中的配置示例(较少用,但支持):
nginx
server {
listen 8888; # 代理服务端口
resolver 8.8.8.8; # DNS解析器
location / {
proxy_pass http://$http_host$request_uri; # 将请求转发到目标服务器
proxy_set_header Host $http_host;
}
}客户端(如浏览器)设置 HTTP 代理为 nginx服务器IP:8888,然后正常访问任何网站,Nginx 会代为请求并返回结果。
特点:
- 客户端明确知道代理的存在(需要手动配置代理地址)。
- 代理对目标服务器是透明的(目标服务器看到的请求来自代理,而非真实客户端)。
- 常用于:突破网络限制、隐藏客户端真实IP、缓存资源加速。
2. 反向代理
场景类比:
你打电话给一个公司总机(比如 114 查号转接),总机根据你的需求(转技术部、销售部)把电话转给对应分机。你并不知道最终接电话的是谁。这个总机就是反向代理服务器。
Nginx 中的经典配置:
nginx
server {
listen 80;
server_name example.com;
location /api/ {
proxy_pass http://backend_server_pool; # 将请求转发到后端服务器集群
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}客户端访问 http://example.com/api/...,Nginx 收到后转发给内部实际提供 API 的服务(如 http://192.168.1.10:8080),并把响应返回给客户端。
特点:
- 客户端不知道后端真实服务器的存在,只与 Nginx 交互。
- 代理对客户端是透明的(客户端认为 Nginx 就是最终服务器)。
- 常用于:负载均衡、安全隔离、缓存静态内容、SSL 终结、统一入口。
对比表
| 维度 | 正向代理 | 反向代理 |
|---|---|---|
| 服务对象 | 客户端(帮客户端访问外部) | 服务器(帮服务器接收请求) |
| 客户端感知 | 需要手动配置代理 | 无感知,访问的是代理域名/IP |
| 服务器感知 | 看到代理IP,而非真实客户端 | 看到代理IP(可通过 X-Forwarded-For 获取真实IP) |
| 典型用途 | 翻墙、匿名访问、缓存下载 | 负载均衡、安全防护、动静分离 |
| Nginx 配置关键 | resolver + proxy_pass 用变量 | proxy_pass 指向后端地址或 upstream |
一句话记忆
正向代理:我要访问你,但我不能直接访问,所以我找个帮手(正向代理)替我去找你。
反向代理:你想访问我,但你不知道我是谁,所以你找到总机(反向代理),它帮你转给我。