一、代理到底是什么¶
原笔记先把“代理”讲得很生活化:
代理就像外卖平台、中介或代办服务,用户不直接和目标打交道,而是先经过中间人。
在 Web 场景里,这个“中间人”通常就是代理服务器。
如果后端只有一台 Web 节点,单纯用 Nginx 代理功能就够了;如果后端是多个节点的集群,后续就会进一步引出负载均衡。
二、正向代理和反向代理有什么区别¶
原笔记强调,正向还是反向,关键看“代理是站在谁那一边”。
| 类型 | 代理对象 | 常见用途 |
|---|---|---|
| 正向代理 | 代表客户端访问外部网站 | 共享上网、突破网络限制、隐藏客户端身份 |
| 反向代理 | 代表服务端接收用户请求 | 统一网站入口、隐藏后端节点、后续可扩展为负载均衡 |
原笔记还用了两个类比:
- 正向代理像“代购”,你告诉代购要买什么,代购帮你去外部网站拿回来
- 反向代理像“餐厅服务员”,用户只和服务员打交道,真正的后厨细节被隐藏起来
对 Nginx 运维来说,更常见的是反向代理。
三、实验环境是怎么设计的¶
原笔记给出的上手环境很简单:
| 角色 | 主机名 | 地址 |
|---|---|---|
| Web 服务器 | oldboy01 |
192.168.1.20 / 172.16.1.20 |
| 代理服务器 | oldboy02 |
192.168.1.21 / 172.16.1.21 |
站点信息:
- 域名:
proxy.oldboylinux.cn - Web 站点目录:
/app/code/proxy/ - 首页文件:
index.html
这个结构的重点是:
- Web 服务器负责真实内容
- 代理服务器不提供站点文件,只负责转发请求
四、先把后端 Web 节点准备好¶
原笔记先在 Web 节点上安装并配置 Nginx,然后创建一个用于测试的静态站点:
server {
listen 80;
server_name proxy.oldboylinux.cn;
root /app/code/proxy;
error_log /var/log/nginx/proxy-error.log notice;
access_log /var/log/nginx/proxy-access.log main;
location / {
index index.html;
}
}
然后创建站点目录和首页内容:
mkdir -p /app/code/proxy/
echo proxy.oldboylinux.cn web01 > /app/code/proxy/index.html
原笔记还特别提醒,为了避免其他虚拟主机干扰测试,最好先把不相关的 .conf 文件改成 .conf.bak,只保留当前测试所需的配置。
最后用命令行验证后端节点本身是否可用:
curl -H "Host: proxy.oldboylinux.cn" 192.168.1.20
返回:
proxy.oldboylinux.cn web01
说明 Web 节点已经准备就绪。
五、代理服务器如何配置 proxy_pass¶
代理服务器上的配置更简单,因为它并不直接提供网页文件,只负责把请求转交给后端:
server {
listen 80;
server_name proxy.oldboylinux.cn;
error_log /var/log/nginx/proxy-error.log notice;
access_log /var/log/nginx/proxy-access.log main;
location / {
proxy_pass http://192.168.1.20:80;
proxy_set_header Host $http_host;
}
}
这里最关键的两行是:
proxy_pass http://192.168.1.20:80;proxy_set_header Host $http_host;
它们分别负责:
- 把请求转发给后端 Web
- 把客户端原始请求中的
Host头继续传给后端
配置完成后先执行:
nginx -t
systemctl restart nginx
六、如何验证反向代理已经生效¶
原笔记给出了两种验证方式。
命令行测试:
curl -H "Host: proxy.oldboylinux.cn" http://192.168.1.21
如果返回的仍是:
proxy.oldboylinux.cn web01
就说明代理服务器已经能够把请求成功转给后端节点。
浏览器测试则是在 Windows 里加入:
192.168.1.21 proxy.oldboylinux.cn
之后直接访问:
http://proxy.oldboylinux.cn/
七、为什么还建议做抓包观察¶
原笔记还建议在代理服务器上用 tcpdump 抓取 80 端口流量,再导出到 Wireshark 里观察。
示例命令:
sudo tcpdump -i eth0 -s 0 -A 'tcp port 80 and (((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0)' -w http_eth0.pcap
抓包的价值在于可以直观看到:
- 客户端到代理是一段请求和响应
- 代理到后端 Web 又是一段新的请求和响应
这也正好印证了反向代理“中间代理代替用户再发起一次请求”的工作方式。
八、小结¶
这个上手案例把 Nginx 反向代理最核心的部分串起来了:
- 理解代理分类
- 准备一个后端 Web 节点
- 在前端代理服务器上使用
proxy_pass - 用
Host头保持虚拟主机匹配正确 - 通过测试和抓包确认请求转发过程
对后续学习真实生产里的代理故障和负载均衡配置,这就是最直接的起点。