找回密码
立即注册
搜索
热搜: Java Python Linux Go
发回帖 发新帖

953

积分

0

好友

123

主题
发表于 13 小时前 | 查看: 1| 回复: 0

去做,去错,去破!

在使用 Cloudflared Tunnel 进行内网穿透时,后端服务的配置常常是一个令人困惑的点,尤其是关于 TLS 的处理。本文将详细说明在 Cloudflared 反向代理模式下,Caddy 服务的最佳配置实践,帮助你避免常见的配置陷阱。

一、核心配置原则

整个配置的核心思想可以概括为:职责分离。Cloudflared 与 Caddy 各司其职,能简化配置并提升稳定性。

  1. Caddy 仅需配置为纯 HTTP 服务
    这意味着你无需在 Caddy 配置中设置 internal tls 或任何其他与 TLS 相关的指令。Caddy 只需监听本地的某个端口(例如 :8080),专注于处理应用层的业务逻辑即可。这种配置方式极大地简化了 Caddy 侧的 配置管理 复杂度。

  2. TLS 加密由 Cloudflared 全权负责
    Cloudflared Tunnel 会负责与公网客户端之间建立 TLS 加密连接。当请求通过隧道到达你的服务器时,Cloudflared 会先完成 TLS 解密,然后将解密后的纯 HTTP 请求转发给本地监听的 Caddy 服务。因此,Caddy 完全不参与这部分的加密环节,自然也不需要配置 TLS。

二、为什么不建议配置双重 TLS?

你可能会想,既然 Cloudflared 可以处理 TLS,那让 Caddy 也开启 TLS 不是更安全吗?实际上,这种“双重 TLS”配置弊大于利。

  1. 功能冗余:Cloudflared 已经完成了公网侧的端到端加密,在本地回环(localhost)上再叠加一层 TLS,并不会带来额外的安全增益,反而是一种资源浪费。
  2. 增加配置成本:你需要额外管理 Caddy 的证书,并配置 Cloudflared 信任这个本地证书,同时还需要调整端口映射规则(例如从 http://localhost:8080 改为 https://localhost:8443)。
  3. 提升出错概率:双重 TLS 可能引发证书验证、协议兼容性或端口映射错误,一旦出现问题,排查故障的复杂度和时间成本会大幅上升。

三、关键注意事项

遵循以上原则配置时,还需要注意两个关键细节:

  1. 确保 Caddy 监听地址正确:Caddy 应该监听本地可访问的地址,例如 127.0.0.1:8080:8080(后者默认绑定所有接口,但在本机环境也可用)。目的是避免服务意外暴露在公网端口上。
  2. 核对 Cloudflared 转发配置:在你的 Cloudflared 配置文件(通常是 config.yml)中,ingress 规则里指向的后端服务地址,必须与 Caddy 的监听地址和端口完全一致。例如,如果 Caddy 监听 127.0.0.1:8080,那么 Cloudflared 的配置就应该是 service: http://127.0.0.1:8080。这一步是确保流量能正确送达的关键,务必仔细核对。

以下是配合此场景的一个简单 Caddyfile 示例和代码片段:

# Caddyfile
# 监听本地 8080 端口,提供纯 HTTP 服务
:8080

# 你的路由规则
route {
    # 这里配置你的各种路由、反向代理或文件服务
    reverse_proxy /api/* localhost:3000
    file_server /static/* {
        root /var/www/html
    }
}
// 一个简单的 Node.js 后端示例,运行在 3000 端口,由上面的 Caddy 代理
const express = require('express');
const app = express();
app.use(express.json());

// 定义路由
app.get('/api/data', (req, res) => {
  res.json({ message: 'Hello from server!' });
});

app.post('/api/data', (req, res) => {
  const { name, age } = req.body;
  if (!name || !age) {
    return res.status(400).json({ error: 'Name and age are required' });
  }
  res.json({ message:  `Hello ${name}, you are ${age} years old.` });
});

// 启动服务器
const PORT = process.env.PORT || 3000;
app.listen(PORT, () => {
  console.log(`Server running on port ` + PORT);
});

运行结果图:代码示例

总结

总而言之,在 Cloudflared Tunnel 的反向代理架构下,让 Caddy “轻装上阵”,只作为纯 HTTP 后端服务,是最简单、最稳定也最合理的配置方式。这遵循了 系统 架构中单一职责和最小化配置的原则。记住这个关键点,可以帮你节省大量不必要的调试时间。

更多关于 Cloudflared 隧道本身的配置细节,你可以参考其官方文档

LEARN BY !




上一篇:开源工具 novelWriter:告别混乱,用 Python 与纯文本高效管理小说项目
下一篇:Taskwarrior:开源命令行任务管理工具实战,从安装到高级自定义
您需要登录后才可以回帖 登录 | 立即注册

手机版|小黑屋|网站地图|云栈社区 ( 苏ICP备2022046150号-2 )

GMT+8, 2026-1-27 18:16 , Processed in 0.408890 second(s), 40 queries , Gzip On.

Powered by Discuz! X3.5

© 2025-2026 云栈社区.

快速回复 返回顶部 返回列表