Code前端首页关于Code前端联系我们

Nginx 1.25.0发布,开启HTTP时代的魔盒3

terry 2年前 (2023-09-28) 阅读数 109 #未命名

Nginx 1.25.0发布,开启HTTP 3时代的魔盒

近日,Nginx发布了大版本1.25.0。该版本引入了对QUIC和HTTP/3协议的支持,Nginx正式进入HTTP/3时代。从 1.25.0 开始,Linux 二进制包中启用了 QUIC 和 HTTP/3。

QUIC 和 HTTP/3 支持是实验性的,需要用户自行决定。

从源代码生成

HTTP/3 支持 ngx_http_v3_module 提供特殊支持。对于源代码的编译版本,用户必须自行启用模块:

--z-http_v3_module

启用编译参数。

HTTP/3支持需要SSL基础库提供编译和执行支持。 Nginx 官方建议通过 BoringSSL、LibreSSL 或 QuicTLS 提供支持。虽然OpenSSL也可以支持,但它不兼容旧数据。

要从源代码构建,您需要使用configure命令(详细信息请参阅Nginx官方文档):

对于BoringSSL使用

./configure--with-debug--with-http_v3_module--with-cc-opt="-I../boringssl/include"--with-ld-opt="-L../boringssl/build/ssl-L../boringssl/build/crypto"

要配置QuicTLS:

/configure--with-debug--with-http_v3_module--with-cc-opt="-I../quictls/build/include"--with-ld-opt="-L../quictls/build/lib"

或LibreSSL:

./configure--with-debug--with-http_v3_module--with-cc-opt="-I../libressl/build/include"--with-ld-opt="-L../libressl/build/lib"

然后配置,使用make 编译安装。监听指令

Configuration

中的 ngx_http_core_module 模块有一个新参数,可在指定端口上启用基于 QUIC 的 HTTP/3。还可以指定

quic 参数以重用端口参数,以便与多个工作程序正常工作。有关指令列表,请参阅 ngx_http_v3_module 模块描述。

启用地址验证:

quic_retry on;

启用 0-RTT:

ssl_early_data on;

启用 GSO(通用分段卸载):

quic_gso on;

设置主机证书:

quic_host_key <filename>;

启用 QUIC 需要默认 ssl_protocols 指令来指定 TLSv1.3 协议。

特定于 GSO Linux 的优化默认情况下处于禁用状态。如果配置了适当的网络接口,请使其支持 GSO。

配置示例

http {log_format quic '$remote_addr - $remote_user [$time_local] ''"$request" $status $body_bytes_sent ''"$http_referer" "$http_user_agent" "$http3"';access_log logs/access.log quic;server {
listen 8443 quic reuseport;listen 8443 ssl;ssl_certificate certs/example.com.crt;ssl_certificate_key certs/example.com.key;location / {add_header Alt-Svc 'h3=":8443"; ma=86400';}}

故障排除

如果配置的HTTP/3不起作用或出现其他问题,您可以使用以下故障排除方法进行故障排除。

1。验证 nginx 是否使用正确版本的基本 SSL 库构建,并且在运行时使用正确的 SSL 库。可以使用 nginx -V 显示当前使用的SSL库的相关运行参数。

2。确保客户确实通过 QUIC 发送请求。建议从简单的控制台客户端开始。例如,ngtcp2 在尝试使用真正的浏览器之前确保服务器已正确配置,这对证书可能非常挑剔。

3。在 nginx 构建上启用调试支持并检查调试日志。它应该包含有关连接及其失败原因的所有详细信息。所有相关消息都包含前缀“quic”,可以轻松过滤。要进行更深入的故障排除,可以使用以下宏启用附加调试:

NGX_QUIC_DEBUG_PACKETS, NGX_QUIC_DEBUG_FRAMES, NGX_QUIC_DEBUG_ALLOC, NGX_QUIC_DEBUG_CRYPTO.
./configure--with-http_v3_module--with-debug--with-cc-opt=" - DNGX_QUIC_DEBUG_PACKET S-DNGX_QUIC_DEBUG_CRYPTO"

版权声明

本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。

热门