TLS / HTTPS / ACME
最简 HTTPS(ACME 自动证书)
toml
[[sites]]
name = "my-site"
server_name = ["example.com"]
listen = [80]
listen_tls = [443]
root = "/var/www/html"
acme_email = "your@email.com" # 一行开启 ACME 自动 HTTPS等价完整写法:
toml
[sites.tls]
acme = true
acme_email = "your@email.com"完整 TLS 配置
toml
[sites.tls]
# ─── 证书来源(三选一) ──────────────────────────────────────────
# 方式 1:ACME 自动证书
acme = true
acme_email = "your@email.com"
acme_provider = "letsencrypt" # letsencrypt / zerossl / buypass / litessl / 自定义 URL
acme_challenge = "http01" # http01 / dns01
acme_renew_days_before = 30 # 到期前 N 天自动续期
# 方式 2:手动单证书
cert = "/etc/ssl/example.com.crt"
key = "/etc/ssl/example.com.key"
# 方式 3:多证书(SNI 路由,同端口不同域名不同证书)
[[sites.tls.certs]]
cert = "/etc/ssl/example.com.crt"
key = "/etc/ssl/example.com.key"
[[sites.tls.certs]]
cert = "/etc/ssl/example.org.crt"
key = "/etc/ssl/example.org.key"
# ─── TLS 版本控制 ─────────────────────────────────────────────
min_version = "tls1.2" # tls1.2 / tls1.3(默认 tls1.2)
max_version = "tls1.3" # 默认 tls1.3
# ─── 协议列表(ALPN,影响 HTTP/2 和 HTTP/3 协商)──────────────
protocols = ["h3", "h2", "http/1.1"] # 默认全开,顺序即优先级
# ─── HTTP/3 QUIC 调优 ─────────────────────────────────────────
[sites.tls.http3]
max_concurrent_bidi_streams = 200
max_concurrent_uni_streams = 100
idle_timeout_ms = 30000
keep_alive_interval_ms = 10000
receive_window = 8388608 # 8MB
stream_receive_window = 2097152 # 2MB
send_window = 8388608 # 8MB
enable_0rtt = false
mtu_discovery = true
initial_rtt_ms = 333
max_ack_delay_ms = 25ACME DNS-01 验证(通配符证书)
DNS-01 验证可申请 *.example.com 通配符证书:
toml
[sites.tls]
acme = true
acme_email = "your@email.com"
acme_challenge = "dns01"
# Cloudflare DNS
[sites.tls.dns_provider]
type = "cloudflare"
api_token = "your-cloudflare-api-token"
zone_id = "optional-zone-id" # 不填则自动查找
# 阿里云 DNS
# [sites.tls.dns_provider]
# type = "aliyun"
# access_key_id = "your-key-id"
# access_key_secret = "your-key-secret"
# 自定义 Shell 脚本
# [sites.tls.dns_provider]
# type = "shell"
# set_script = "/etc/sweety/dns-set.sh"
# del_script = "/etc/sweety/dns-del.sh" # 可选协议控制
protocols 字段控制站点支持哪些 HTTP 版本,作用于 ALPN 协商:
toml
# 只支持 HTTP/1.1(禁用 H2/H3)
protocols = ["http/1.1"]
# 只支持 HTTP/2
protocols = ["h2"]
# 只支持 HTTP/3(不推荐,浏览器首次无法发现)
protocols = ["h3"]
# 默认(全部支持)
protocols = ["h3", "h2", "http/1.1"]多站点共享同一 TLS 端口时,ALPN 协议列表取所有站点的并集,即只要有一个站点支持 h3,该端口就启用 UDP 监听。
HTTP/3 防火墙注意事项
HTTP/3 使用 UDP 443,确认防火墙已放行:
bash
# iptables
iptables -A INPUT -p udp --dport 443 -j ACCEPT
# firewalld
firewall-cmd --add-port=443/udp --permanent
firewall-cmd --reload