当前位置:首页 > 技术文章 > 正文内容

Nginx 1.25.0发布,正式开启HTTP 3的潘多拉宝盒

arlanguage4个月前 (01-10)技术文章38

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

QUIC和HTTP/3支持是实验性的,需要用户酌情使用。

从源头构建

HTTP/3支持具体支持由ngx_http_v3_module模块提供。对于源码编译版本需要用户自行启用该模块:

--with-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编译安装的。

配置

listen指令中的ngx_http_core_module模块有一个新参数快它在指定端口上启用HTTP/3 over QUIC。

quic参数也可以指定重用端口参数以使其与多个worker一起正常工作。有关指令列表,详见 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_PACKETS -DNGX_QUIC_DEBUG_CRYPTO"

扫描二维码推送至手机访问。

版权声明:本文由AR编程网发布,如需转载请注明出处。

本文链接:http://www.arlanguage.com/post/713.html

标签: nginx debug
分享给朋友:

“Nginx 1.25.0发布,正式开启HTTP 3的潘多拉宝盒” 的相关文章

三年前端还不会配置Nginx?刷完这篇就够了

一口气看完,比自学强十倍!什么是NginxNginx是一个开源的高性能HTTP和反向代理服务器。它可以用于处理静态资源、负载均衡、反向代理和缓存等任务。Nginx被广泛用于构建高可用性、高性能的Web应用程序和网站。它具有低内存消耗、高并发能力和良好的稳定性,因此在互联网领域非常受欢迎。为什么使用N...

性能优化大揭秘:从代码到架构,全方位提升系统性能的实战技巧

在现代软件开发中,系统性能优化是一个永恒的话题。无论是移动应用、Web应用还是分布式系统,性能始终是用户体验、系统稳定性以及业务可扩展性的关键因素。性能瓶颈的存在不仅可能导致用户流失,还可能增加系统维护成本,甚至影响到业务的正常运行。因此,从代码层面到架构层面,全面的性能优化是每个技术人员必须掌握的...

Linux Shell

基本语法第一行第一行必须是 #!/bin/sh。它不是注释,#!/bin/sh 是对shell的声明,说明你所用的是那种类型的shell及其路径所在如果没有声明,则脚本将在默认的shell中执行,默认shell是由用户所在的系统定义为执行shell脚本的shell如果脚本被编写为在Kornshell...

nginx入门——nginx访问日志(六)

日志功能在ngx_http_log_module模块中定义,实现了以指定格式写入请求日志。我们先来看一个nginx配置文件:http { include mime.types; default_type application/octet-stream;...

「自动化运维」从0到1 CICD自动化部署落地分享

?目录一、CICD简介二、CICD实践过程三、含泪踩坑四、历史文章指路一、CICD简介1、CICD定义Continuous Integration (CI) 持续集成Continuous Delivery (CD) 持续交付Continuous Deployment (CD) 持续部署2、DevOp...

不想被恶意访问?SpringBoot 的 IP 白名单限制了解一下!

前言在项目开发中,我们多少都会遇到要对请求访问IP做限制,允许哪些IP是可以访问系统。对于前后分离项目有两种方案,第一种是在Nginx服务中进行配置IP白名单,第二种是项目接口中进行白名单控制,例如在spring boot接口中进行白名单限制。方案一:Nginx服务器中配置IP白名单限制如果想在ng...