正向代理是代表客户端向目标服务器获取资源的中间服务器。
关键特点: 客户端明确知道目标服务器,代理替客户端访问
// 浏览器代理设置示例
const proxyConfig = {
host: "proxy.example.com",
port: 8080,
auth: {
username: "user",
password: "pass"
}
};
// 客户端代码示例
const axios = require('axios');
const httpsProxyAgent = require('https-proxy-agent');
const agent = new httpsProxyAgent(`http://${proxyConfig.auth.username}:${proxyConfig.auth.password}@${proxyConfig.host}:${proxyConfig.port}`);
axios.get('https://www.target-website.com', {
httpsAgent: agent
})
.then(response => console.log(response.data));
反向代理是代表服务器端接收客户端请求并分发到后端服务器的中间服务器。
关键特点: 客户端不知道真实服务器,认为代理就是最终服务器
# Nginx反向代理配置示例
http {
# 定义服务器组
upstream backend_servers {
server 192.168.1.10:8080;
server 192.168.1.11:8080;
server 192.168.1.12:8080;
}
server {
listen 80;
server_name example.com;
location / {
proxy_pass http://backend_servers;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
}
特性 | 正向代理 | 反向代理 |
---|---|---|
代表方 | 代表客户端 | 代表服务器 |
对客户端 | 必须配置代理 | 对客户端透明 |
对服务器 | 隐藏客户端身份 | 隐藏真实服务器 |
访问目标 | 客户端指定 | 代理决定 |
典型应用 | 科学上网、匿名访问 | 负载均衡、安全防护 |
部署位置 | 通常靠近客户端 | 通常靠近服务器 |
常见软件 | Shadowsocks、V2Ray | Nginx、HAProxy |
正向代理就像你的"跑腿员":
- 你明确告诉他去哪个商店买什么
- 他代表你去完成任务并带回物品
- 商店只知道跑腿员,不知道是你要买东西
反向代理就像"前台接待员":
- 客户来到大楼只知道前台接待
- 接待员根据客户需求决定引导去哪个部门
- 客户不知道具体是哪个部门处理了他的事情
正向代理关键点:
反向代理关键点:
两种代理方式各有优势,在不同场景下解决不同问题,理解它们的区别对于设计网络架构至关重要!