很认真地搞了haproxy+caddy+derp 后续还有一堆调整啊

sudoerx 2026-07-08 03:09 1

弄好这个方案 配置是连环坑 搞好后还是有成就感😄 因为haproxy有更多用途

之后要调不少东西了

也不知道这么搞是否值得

先把配置传上了github


让AI给我总结了下 已看晕 删了技术部分 待以后整理吧


这套架构完美融合了四层(TCP)流量调度七层(HTTP/HTTPS)自动化管理,在仅有一个公网 IP 的单节点上,实现了复杂网络服务的极度压榨与优雅共存。这不仅是一次除错之旅,更是高级网络编排(Network Orchestration)的一次经典实战。


以下为你梳理的架构技术特点总结,可以直接作为你的技术笔记底稿:




🚀 架构总览:HAProxy + Caddy + DERP 端口复用终极方案


1. 极限端口复用与四层 SNI 嗅探 (L4 SNI Routing)


这是整套架构的“灵魂”。传统架构中,443 端口只能被一个 Web 服务器(如 Nginx/Caddy)独占,而 DERP 作为强依赖 443 端口的非标准 HTTPS 服务,极易与 Web 服务产生死锁冲突。



  • 技术解法:利用 HAProxy 作为系统的统一流量总闸,在 mode tcp(四层)下工作。

  • 实现细节:通过 tcp-request inspect-delayreq.ssl_hello_type 1 嗅探 TLS 握手阶段的 ClientHello 报文,提取出 SNI (Server Name Indication)

  • 优势:在不解密流量、不破坏原有证书链的前提下,精准地将发往 la.domain.de 的流量分发给 DERP (8443),将发往其他域名的流量分发给 Caddy (8444)。


二、 流量拓扑图 (Data Flow)


记录下这三条各司其职的完美路由,未来排查问题时一目了然:


🟢 路由 A:证书申请与续期 (Port 80 纯明文)


Let's Encrypt (外部) ➔ HAProxy (*:80) ➔ default_backend caddy_http127.0.0.1:8080 (Docker Caddy) ➔ 证书落地


🔵 路由 B:Tailscale 隧道中转 (Port 443 加密透传)


Tailscale 客户端 (外部) ➔ HAProxy (*:443 TCP 模式) ➔ 嗅探 SNI 为 la.domain.deuse_backend derp_backend127.0.0.1:8443 (Docker DERP) ➔ 握手并中转流量


🟣 路由 C:未来扩展 Web 服务 (Port 443 代理拆包)


浏览器 (外部) ➔ HAProxy (*:443 TCP 模式) ➔ 嗅探 SNI 为其他域名 ➔ default_backend caddy_https (附加 Proxy Protocol v2) ➔ 127.0.0.1:8444 (Docker Caddy) ➔ 解包获取真实 IP ➔ 代理至本地其他容器 (如 Blog/Nextcloud)



最新回复 (7)
  • wereiyou 07-08 03:11
    1

    豆包写的?

  • sudoerx 楼主 07-08 03:12
    2

    @wereiyou #1 啊对 gemini大豆包

  • 纳西妲 07-08 03:12
    3

    ^-^ 我是不是应该告诉你 haproxy 的 http 模式可以替代 caddy(博主又有的忙活了)

  • sudoerx 楼主 07-08 03:16
    4

    @纳西妲 #3 啊 新功能么 也可以方便的跳转https?😲

    好像逻辑又要重新搞

  • 纳西妲 07-08 03:20
    5

    @sudoerx #4 发布于2026/7/8 03:16:38

    @纳西妲 #3 啊 新功能么 也可以方便的跳转https?😲

    好像逻辑又要重新搞


    HAProxy 本来就有 tcp 和 http 两种模式,类似 Nginx 的 stream {} 和 http {},但是证书需要用 acme 签,如果不想输命令可以用 certimate 面板搞


    然后就是修改的点差不多就是新写个 frontend,mode 写成 http,然后监听地址可以选 tcp 端口,但是我推荐用 unix socket 因为性能更高(caddy 好像也能这样搞),最后把 tcp backend 里的 caddy 地址换成 http frontend 的 unix:XXXXXXXXXXXXXXXX

  • Semisweet 07-08 03:21
    6

    这种活让nginx干就行了,caddy功能还是不够

  • sudoerx 楼主 07-08 03:34
    7

    @Semisweet #6 @纳西妲 #5 好像这样性能是高些。

    我先用这个简单的方案跑起来 如果重新架构 确实太复杂了。而从解耦的思路上看 让caddy干力所能及的事也不错。主要是证书链 如果交给hproxy,好像有更多配置要改

* 帖子来源NodeSeek
返回