手上有一个博客、一个图床、一个内部工具,各自占着端口。想让它们共用同一个域名和证书,反向代理是最省事的答案。

结构

ws.example.com/          → 博客(php-fpm)
ws.example.com/img/      → 图床(127.0.0.1:5244)
ws.example.com/tool/     → 内部工具(127.0.0.1:3000)

配置要点

location /img/ {
    proxy_pass http://127.0.0.1:5244/;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    client_max_body_size 20m;
}
  • proxy_pass 结尾有没有斜杠,决定路径是否被截断,这是最常见的 404 来源。
  • 子路径部署时,后端必须知道自己挂在前缀下(base 配置或 X-Forwarded-Prefix),否则静态资源会 404。
  • WebSocket 要额外加 Upgrade 与 Connection 两个头,不然长连接会一直掉。

证书

一张泛域名证书覆盖所有子路径,续期只 reload nginx。别给每个服务单独申请,管理成本会翻倍。