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

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

**测试环境**

- 版本号: 26100.33650
- 版本: Standard / Datacenter
- 架构: x64
- 证据: E1
- 核验日期: 2026-10-29

## 一句话结论

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

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

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

## 安装

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

```bat
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` 停止。

## Caddyfile：静态站

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

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

实验名不解析公网：

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

`tls internal` 用 Caddy 本地 CA；客户端要信任它（服务器 `caddy trust`，或客户端导入根 CA）。它不是公网证书。

## 反向代理

```caddyfile
app.example.com {
    reverse_proxy 127.0.0.1:3000
}
```

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

响应头：

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

## Windows 服务

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

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

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

## 验证

```powershell
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-*`。

> **警告: 自动 HTTPS 需要真实域名和可达端口**
>
> DNS 不指向本机，或 80/443 被挡，公网自动 TLS 完不成。`tls internal` 只用于实验，不要当公网证书。

## 实验室边界

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

## 来源

- [Caddy — 安装](https://caddyserver.com/docs/install)
- [Caddy — Caddyfile 概念](https://caddyserver.com/docs/caddyfile/concepts)
- [Caddy — 自动 HTTPS](https://caddyserver.com/docs/automatic-https)

---

来源页面: https://winbook.fyi/zh/server/web/caddy/
