本文档涵盖了 Caddy 反向代理处理程序中的 HTTP 传输配置选项。传输选项控制反向代理如何与上游服务器通信,包括连接管理、超时、TLS 设置和协议版本。
有关负载均衡算法和上游选择的信息,请参阅负载均衡。有关上游健康监测配置,请参阅健康检查。
反向代理传输负责建立和管理与上游服务器的连接。传输配置决定了 HTTP 请求如何发送到后端,包括连接池、超时行为、TLS 设置以及使用的 HTTP 协议版本。
来源:modules/caddyhttp/reverseproxy/reverseproxy.go74-78 modules/caddyhttp/reverseproxy/httptransport.go50-164
HTTPTransport 结构体为 HTTP 客户端传输行为提供了全面的配置。它封装了 Go 的标准 http.Transport,并增加了 Caddy 特定的功能。
来源:modules/caddyhttp/reverseproxy/httptransport.go53-164
| 设置 | 默认 | 描述 |
|---|---|---|
DialTimeout | 3秒 | 连接上游的最大等待时间 |
FallbackDelay | 300毫秒 | 生成 RFC 6555 快速回退连接前的延迟 |
ResponseHeaderTimeout | 无超时 | 等待响应头的时间 |
ExpectContinueTimeout | 无超时 | 等待 "100 Continue" 响应的时间 |
MaxConnsPerHost | 0 (无限制) | 每个上游主机的最大连接数 |
来源:modules/caddyhttp/reverseproxy/httptransport.go97-114
传输支持可配置的缓冲区大小和每连接的读/写超时
| 设置 | 默认 | 描述 |
|---|---|---|
ReadBufferSize | 4KiB | 读取缓冲区大小(字节) |
WriteBufferSize | 4KiB | 写入缓冲区大小(字节) |
ReadTimeout | 无超时 | 读取操作的最大时间 |
WriteTimeout | 无超时 | 写入操作的最大时间 |
MaxResponseHeaderSize | 10MiB | 最大响应头大小 |
当配置时,读/写超时通过使用 tcpRWTimeoutConn 封装 TCP 连接来强制执行。
来源:modules/caddyhttp/reverseproxy/httptransport.go116-126 modules/caddyhttp/reverseproxy/httptransport.go753-785
TLSConfig 结构体为与上游服务器的安全连接提供了全面的 TLS 客户端配置。
来源:modules/caddyhttp/reverseproxy/httptransport.go554-615
CARaw: 使用 CA 模块的现代证书池配置RootCAPool / RootCAPEMFiles: 遗留 CA 证书配置 (已弃用)ClientCertificateFile / ClientCertificateKeyFile: 静态客户端证书文件ClientCertificateAutomate: 自动客户端证书管理InsecureSkipVerify: 禁用证书验证(仅用于测试)ServerName: 覆盖用于证书验证的 SNI 主机名Renegotiation: TLS 重协商策略 (never, once, freely)ExceptPorts: 不应使用 TLS 的端口来源:modules/caddyhttp/reverseproxy/httptransport.go617-733
KeepAlive 结构体控制 HTTP 连接重用和持久化行为。
| 设置 | 默认 | 描述 |
|---|---|---|
已启用 | true | 是否启用 HTTP Keep-Alive |
ProbeInterval | 30秒 | 探测连接活跃性的频率 |
MaxIdleConns | 0 (无限制) | 最大空闲连接数 |
MaxIdleConnsPerHost | 32 | 每个主机之间的最大空闲连接数 |
IdleConnTimeout | 2分钟 | 保持空闲连接的时间 |
来源:modules/caddyhttp/reverseproxy/httptransport.go735-751 modules/caddyhttp/reverseproxy/httptransport.go192-199
传输通过 Versions 字段支持多种 HTTP 协议版本。
["1.1", "2"]"2" 时,HTTP/2 会自动配置RoundTrip 方法根据请求 URL 方案和配置的版本选择合适的传输
来源:modules/caddyhttp/reverseproxy/httptransport.go177-179 modules/caddyhttp/reverseproxy/httptransport.go439-484 modules/caddyhttp/reverseproxy/httptransport.go486-505
传输可以发送 PROXY 协议头以保留客户端连接信息
ProxyProtocol: 要使用的版本 ("v1" 或 "v2")PROXY 协议头在使用请求上下文中的 ProxyProtocolInfo 建立连接后立即发送。
来源:modules/caddyhttp/reverseproxy/httptransport.go76-78 modules/caddyhttp/reverseproxy/httptransport.go279-333 modules/caddyhttp/reverseproxy/httptransport.go430-433
NetworkProxyRaw 字段配置正向代理支持
caddy.network_proxy 命名空间使用可插拔代理模块HTTP_PROXY, HTTPS_PROXY, NO_PROXY)UpstreamResolver 允许自定义 DNS 配置
Addresses: 自定义 DNS 服务器地址列表来源:modules/caddyhttp/reverseproxy/httptransport.go58-59 modules/caddyhttp/reverseproxy/httptransport.go237-254
传输在 Caddyfile 中通过 reverse_proxy 块内的 transport 指令进行配置。
reverse_proxy upstream1 upstream2 {
transport http {
dial_timeout 5s
response_header_timeout 10s
read_timeout 30s
write_timeout 30s
}
}
reverse_proxy https://backend {
transport http {
tls
tls_trusted_ca_certs /path/to/ca.pem
tls_client_auth /path/to/cert.pem /path/to/key.pem
tls_server_name backend.example.com
tls_insecure_skip_verify
}
}
reverse_proxy backend {
transport http {
keepalive 5m
keepalive_idle_conns 100
max_conns_per_host 50
proxy_protocol v2
versions 1.1 2
compression off
}
}
| Caddyfile 指令 | HTTPTransport 字段 | 描述 |
|---|---|---|
dial_timeout | DialTimeout | 连接超时 |
response_header_timeout | ResponseHeaderTimeout | 响应头超时 |
read_timeout | ReadTimeout | 每连接读取超时 |
write_timeout | WriteTimeout | 每连接写入超时 |
tls | TLS | 启用 TLS 配置 |
keepalive | KeepAlive.IdleConnTimeout | Keep-alive 超时 |
versions | 版本 | HTTP 协议版本 |
proxy_protocol | ProxyProtocol | PROXY 协议版本 |