一、代理到底是什么

原笔记先把“代理”讲得很生活化:
代理就像外卖平台、中介或代办服务,用户不直接和目标打交道,而是先经过中间人。

在 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 头保持虚拟主机匹配正确
  • 通过测试和抓包确认请求转发过程

对后续学习真实生产里的代理故障和负载均衡配置,这就是最直接的起点。