麦式参考 MickerBook Reference

反向代理

Reverse Proxy

也常被叫作:反代代理服务器Nginx 反代

你可能会这么说

「我的程序跑在 3000 端口,怎么让别人直接用域名打开?」

反向代理 Reverse Proxy

站在用户和应用之间,接住域名请求,再把它转给服务器内部真正运行的程序。

反向代理像一栋楼的前台。访客只知道大楼地址,不需要知道里面哪间办公室、哪个端口在办事;前台看一眼访客要去哪,再把请求转给对应程序。网站里最常见的是 Nginx 或 Caddy:它们监听 80/443 端口,替内部运行在 3000、8080 等端口的应用接客。

它能做的不只是转发。HTTPS 证书通常也放在这一层;同一台服务器上的多个域名可以被分到不同应用;还可以统一设置请求大小、超时、压缩和缓存。但每多一层也多一个排错点——看到 502 时,可能不是应用坏了,而是反向代理找不到内部端口。

验收反向代理不能只看配置文件里有 proxy_pass。要从真实域名打开页面,再确认请求确实到达目标应用;同时直接访问内部端口不应该成为面向用户的正式入口。改代理配置前要保存旧配置并跑语法检查,避免一处拼错让同机所有网站一起下线。

长什么样 真实可交互,不是截图

用户访问 example.comNginx :443应用 :3000
✓ 对外入口https://example.com
证书与域名在代理层
✕ 不该给用户http://服务器IP:3000
暴露内部端口

用户只接触域名和 HTTPS;应用端口藏在服务器内部,由反向代理转发。

拆开看,里面有这几块

  1. 1
    入口 Listener

    对外监听 80/443,接收域名和 HTTPS 请求。

  2. 2
    匹配规则 Route

    按域名或路径判断请求应该交给哪个应用。

  3. 3
    上游 Upstream

    真正处理请求的内部程序,例如 127.0.0.1:3000。

  4. 4
    请求头 Headers

    把原始域名、访客 IP 和协议告诉上游,避免应用误判。

常见的有哪几种

按域名转发Host routing

a.com 到应用 A,b.com 到应用 B。

用在:一台服务器托管多个网站。

按路径转发Path routing

/api/ 给后端,/ 给前端。

用在:前后端分开运行但共用一个域名。

负载均衡Load balancing

把请求分给多个相同应用实例。

用在:单个实例扛不住流量,且已有监控和健康检查。

容易搞混?这样区分

反向代理 CDN Content Delivery Network

CDN 把内容缓存到离用户更近的节点;反向代理通常在源站门口把请求转给内部应用。两者可以同时存在。

看 CDN
反向代理 DNS Domain Name System

DNS 只负责让域名找到服务器 IP;请求到服务器后由反向代理决定进哪个应用。

看 DNS
反向代理 网站托管 Web hosting

托管回答网站住在哪里;反向代理回答请求到了这台机器后该交给谁。

看 网站托管

什么时候用得上

域名接应用

Node 程序跑在 3000 端口,用 Nginx 把 https://example.com 转进去。

一机多站

多个域名共用一台服务器,每个域名转到不同目录或进程。

排查 502

先看上游程序是否存活、端口是否一致,再看代理配置和日志。

你可以这样跟 AI 说

直接复制下面这段,把【】里的换成你的情况。它比一句「帮我加个 X」多说清楚了:改哪里、不许动啥、做完交什么。

【任务】为 [域名] 配置反向代理,把请求转发到服务器内部的 [127.0.0.1:3000]
【范围】只新增或修改这个域名对应的站点配置,不动同机其他网站
【目标】访问 https://[域名] 能看到当前应用;保留原始 Host、访客 IP 和 HTTPS 协议信息
【边界】执行前备份旧配置;先运行配置语法检查,通过后才能 reload;不要暴露内部端口;不要删除其他站点配置
【交付】给我配置文件路径和具体改动、语法检查原始输出、reload 结果、真实域名 HTTP 状态,以及一条恢复旧配置的命令

关键不是生成一段 Nginx 配置,而是先备份、检查语法、再 reload,最后从真实域名验收。

它说「做好了」,你怎么自己验

这是本站的重头戏。AI 最会的不是写代码,是说「已完成」。这一条,它通常最多做到「生产」这层:线上真实环境有效,有回滚和观测。

要亲眼看到这些,才算数

  • 用无痕窗口打开真实 HTTPS 域名,确认页面来自目标应用,不是默认欢迎页或旧站。
  • 查看浏览器网络面板,主文档状态是 200,静态资源没有成片 404/502。
  • 让 AI 贴配置语法检查的原始输出;只有检查通过后才允许 reload。
  • 确认配置只改了目标域名,没有覆盖同机其他 server/site 块。
  • 不要为了验收主动停止真实生产应用。优先查看代理访问日志、上游健康检查和响应头;需要演练 502/维护页时,只在 staging、隔离实例或明确维护窗口进行,并确认生产主路径不受影响。

它常这么糊弄你

  • 「反向代理已配置」——只写了配置文件,没有语法检查、reload 和真实域名访问证据。
  • 「域名已经指向应用」——实际打开的是 Nginx 默认页,说明 Host 规则没匹配。
  • 「502 是浏览器缓存」——502 通常是代理连不上上游,先查进程、端口和错误日志。
  • 直接用 nginx -s reload 修改生产配置,却没备份也没跑 nginx -t;一处语法错可能影响整机站点。
  • 为了省事把内部应用端口直接开放公网,绕过 HTTPS 和访问控制。

反向代理服务于真实域名入口,只有生产域名、证书、代理和上游共同工作时才能验到 production。

考考你 选一个你觉得对的

DNS 已把域名指向服务器,但服务器里有三个应用。谁负责把这个域名的请求交给正确应用?