必须显式放行UDP 443端口,因QUIC基于UDP运行,防火墙默认仅开放TCP 443;需用ufw allow 443/udp、iptables -I INPUT -p udp --dport 443 -j ACCEPT等指令单独配置,并在云平台安全组中明确选择UDP协议而非“HTTPS”别名。

HTTP/3 依赖 QUIC 协议,而 QUIC 基于 UDP 运行,默认使用 UDP 443 端口。但多数防火墙默认只放行 TCP 443(HTTPS),不会自动放行 UDP 443,导致客户端无法完成 QUIC 握手,表现为“连接超时”或浏览器 network 面板中 protocol 显示为 h2/h1 而非 h3。
确认系统防火墙是否已放行 UDP 443
不同防火墙工具操作不同,需显式指定协议为 UDP,不能仅依赖“HTTPS”别名或默认规则:
-
ufw(Ubuntu 默认):执行
sudo ufw allow 443/udp,不要用sudo ufw allow 'Nginx Full'(它只开 TCP) -
iptables(传统 Linux):添加规则
sudo iptables -I INPUT -p udp --dport 443 -j ACCEPT,并保存(如iptables-save > /etc/iptables/rules.v4) -
nftables(较新系统):在对应表链中插入
nft add rule inet filter input udp dport 443 accept
云平台安全组必须单独勾选 UDP 协议
阿里云、腾讯云、AWS 等控制台的安全组规则中,“端口范围”填 443 不代表同时开放 TCP 和 UDP —— 必须:
- 在协议类型下拉菜单中明确选择 UDP(而非“HTTPS”或“全部”)
- 源地址按需填写(如
0.0.0.0/0或特定 CIDR) - 确认规则已生效且优先级高于拒绝规则
验证 UDP 443 是否真正可达
仅检查本地监听不够,要模拟真实客户端行为:
- 从服务器本机测试监听状态:
nc -u -zv 127.0.0.1 443(成功仅说明 Nginx 在监听,不保证外网可达) - 从外部机器执行:
timeout 5 bash -c 'echo -n "Q" | nc -u -w3 YOUR_SERVER_IP 443' && echo "UDP OK" || echo "UDP blocked" - 服务端抓包确认流量抵达:
sudo tcpdump -i any udp port 443 -n -c 5,再用curl --http3 https://your-domain.com触发请求,看是否有入向 UDP 包
注意企业级中间设备拦截
部分 WAF、IDS、出口防火墙会将 UDP 443 视为异常流量,默认丢弃或限速:
- 检查设备日志中是否有 “UDP port 443 denied”、“QUIC traffic dropped” 类告警
- 临时关闭 WAF 或旁路测试,确认是否为设备策略导致
- 如需长期启用,联系管理员在策略中白名单 UDP 443,并允许 QUIC 协议特征(如 Initial Packet 格式)


















