
Nginx 1.29.4 正式发布!新版本带来了对上游(upstream)服务器的原生 HTTP/2 协议支持,落地了 Encrypted Client Hello(ECH)功能,并对 HTTP 分块传输编码实施了更严格的解析策略。为运维人员、安全团队和开发者,带来了更强的隐私保护与安全能力。
Nginx 1.29.4 主要更新
原生 HTTP/2 上游支持
Nginx 1.29.4 支持与上游服务器建立原生 HTTP/2 连接,真正实现了从客户端到后端服务的「端到端」HTTP/2 通信。
- 此前,即便客户端与 Nginx 之间使用了 HTTP/2,Nginx 在把请求代理到上游服务器时,仍然会将连接降级为 HTTP/1.0。这就导致后端服务无法享受 HTTP/2 的多路复用、头部压缩等协议级性能优势。
- 现在,你只需要在配置中添加
proxy_http_version 2;指令,就能启用该功能
upstream backend {
server api.example.com:8443;
# 使用 HTTP/1.1 或 HTTP/2 连接时,建议设置 keepalive
keepalive 64;
}
server {
listen 443 ssl;
http2 on;
ssl_certificate server.crt;
ssl_certificate_key server.key;
location / {
proxy_pass <https://backend>;
# 启用 HTTP/2 协议代理到上游
proxy_http_version 2;
}
}
新增 ECH 支持
新版本加入了对 Encrypted Client Hello(ECH)的支持。ECH 是 TLS 1.3 的一项前沿扩展,旨在加密 TLS 握手过程中,原本以明文传输的 SNI(服务器名称指示)字段。
- 在没有 ECH 的情况下,SNI 会以明文形式发送,会暴露用户访问的域名——即使连接的其余部分已经加密。
- 这就像一封信的内容被锁在保险箱里,但信封上却清晰写着收件人地址。而 ECH 通过加密整个 ClientHello 消息(包括 SNI),彻底封堵上了这一隐私漏洞。
你可通过ssl_ech_file指令指定一个包含 ECH 配置与私钥的 PEM 文件来启用该功能:
server {
ssl_ech_file /path/to/ech-keys.pem;
# ... 其他 SSL 相关配置
}
ssl_ech_file支持配置多个文件,实现密钥的无缝轮换。以 Cloudflare 为例,它就会每小时轮换一次 ECH 密钥,来确保「持续安全」。
收紧 HTTP 分块传输编码解析
为了应对潜在的 HTTP Request Smuggling 等安全威胁,Nginx 1.29.4 收紧了对分块传输编码(Chunked Transfer Encoding)的解析策略:不再接受单一换行符(bare LF, \n)作为分块消息体中的行终止符。
- 在过去,出于兼容性考虑,Nginx 会同时接受 CRLF(
\r\\n)和 LF(\n)作为行终止符。 - 从本版本起,Nginx 将严格遵循 HTTP/1.1 RFC 规范,仅允许使用 CRLF 序列,从而消除解析歧义,提升整体安全性。








最新评论
引入了附件打开极慢的bug
不卸载它,老莫名其妙跳出来。
nb,解决了Microsoft Store更新时错误码为0x8000000B的问题
创建帐户的时候设置啊,喵喵喵 😺~