跳转到内容

Windows 上的 Caddy:一个二进制搞定自动 TLS

核验于 1 分钟阅读

用 Caddy 在 Windows 跑小站点或反向代理:公网自动 TLS、实验内网证书,以及可验证的 Caddyfile。

测试环境Standard / Datacenter · 版本号 26100.33650 · x64
E1
版本号
26100.33650
版本
Standard / Datacenter
架构
x64
支持
文档(E1)
证据
E1官方文档
核验日期
2026-10-29
页面类型
任务

Caddy 是单个 Windows 二进制,对公网 DNS 名字自动 HTTPS。适合:

  • 有真实域名的小型内网/公网站点;
  • Node/Python 前面的反代;
  • 不想手工签证书的实验环境。

它不是 IIS 的完全替代:Windows 认证、IIS 模块、ASP.NET 特性都不等价。

下载 Windows amd64 zip,解压到 C:\caddy,把 caddy.exe 放进 PATH 或用全路径。

终端窗口
C:\caddy\caddy.exe version
C:\caddy\caddy.exe validate --config C:\caddy\Caddyfile
C:\caddy\caddy.exe run --config C:\caddy\Caddyfile

caddy run 前台运行;caddy start 后台;caddy reload 应用新配置;caddy stop 停止。

lab.example.com {
root * C:/sites/lab
file_server
}

公网 DNS 指向本机、80/443 可达时,Caddy 自动申请/续期证书,用 HTTP-01 或 TLS-ALPN,不需要手工 CSR。

实验名不解析公网:

lab.local {
tls internal
root * C:/sites/lab
file_server
}

tls internal 用 Caddy 本地 CA;客户端要信任它(服务器 caddy trust,或客户端导入根 CA)。它不是公网证书。

app.example.com {
reverse_proxy 127.0.0.1:3000
}

Caddy 默认设置 X-Forwarded-For、X-Forwarded-Proto、Host。WebSocket 由 reverse_proxy 处理,不需要单独 map。

响应头:

app.example.com {
header {
Strict-Transport-Security "max-age=31536000; includeSubDomains"
X-Content-Type-Options "nosniff"
-Server
}
reverse_proxy 127.0.0.1:3000
}

Caddy 不装服务也能跑,但生产应该用服务。用 WinSW/NSSM 包 caddy.exe run --config C:\caddy\Caddyfile:

  • 工作目录 C:\caddy;
  • 账户对二进制/配置/站点读,对 Caddy 数据目录写;
  • 失败重启;
  • 防火墙 80/443 只对目标网段。

不要让“服务 + 计划任务”同时管同一份配置/端口。

终端窗口
C:\caddy\caddy.exe validate --config C:\caddy\Caddyfile
curl.exe -I https://lab.example.com/
curl.exe -I --resolve lab.example.com:443:127.0.0.1 https://lab.example.com/ -k

检查证书 issuer/SAN、HTTP 跳转、应用收到的 X-Forwarded-*。

E1。实验室没有安装 Caddy。Caddyfile 是起点;Server 2025 上验证签发和服务包装后再标 E2。

来源