开启HTTP2.0和HTTP3.0功能


1 环境介绍

操作系统 IP地址 主机名 NGINX版本 角色
Rocky9.6 192.168.8.4 loadbalance.luovip.cn 1.26.2 负载均衡

  本文中将深入探讨如何在NGINX服务器中启用HTTP/2.0和HTTP/3.0。通过启用这些新一代的HTTP协议,可以显著提升网站的加载速度和安全性。HTTP/2.0引入了多路复用、首部压缩等技术,而HTTP/3.0更是基于QUIC协议,进一步减少延迟,提高传输效率。

2 HTTP2.0

2.1 HTTP2.0的概念

  HTTP/2是HTTP协议的主流版本,旨在提高Web性能和效率。与其前身HTTP/1.1相比,HTTP/2引入了多项技术改进,使得数据传输更加高效。以下是HTTP/2的一些关键优势:

  多路复用:允许多个请求同时通过一个TCP连接进行传输,减少延迟。

  头部压缩:通过HPACK算法对HTTP头部进行压缩,降低数据传输量。

  服务器推送:允许服务器在客户端请求之前预先推送资源,提升加载速度。

  二进制分帧:将HTTP消息分成更小的二进制帧,提高解析效率。

  这些改进使得HTTP/2在提升网页加载速度、减少延迟和优化网络带宽利用方面表现尤为出色。通过在NGINX中启用HTTP/2,可以充分发挥其性能优势,为用户提供更快速和流畅的访问体验。

  HTTP/2的主要设计目的是通过HTTPS(也就是HTTP over TLS)进行加密传输。虽然在技术上可以在HTTP(非加密)上启用HTTP/2,但主流浏览器普遍要求HTTP/2必须在HTTPS上运行。这主要是为了确保数据传输的安全性和隐私性。所以,如果打算在NGINX中启用HTTP/2,通常需要先配置SSL/TLS证书并启用HTTPS。这样不仅能够利用HTTP/2的性能优势,还能确保数据传输的安全性。

  离线测试就用自己生成的自签名证书就好,关于如何生成自签名证书,可参考前面的文章

2.2 配置文件案例

cat > /etc/nginx/conf.d/http2.conf <<EOF
server {
    listen 443 ssl http2;

    ssl_certificate /etc/pki/tls/certs/nginx.crt;
    ssl_certificate_key /etc/pki/tls/private/nginx.key;

    server_name loadbalance.luovip.cn;

    # 其他SSL配置
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers 'HIGH:!aNULL:!MD5';

    location / {
        root /usr/share/nginx/html;
        index index.html;
    }
}
EOF

# 重启和重载NGINX
[root@loadbalance ~]# systemctl restart nginx
[root@loadbalance ~]# nginx -s reload

2.3 配置文件详解

  1.listen 443 ssl http2;

   这个指令表示服务器将监听443端口(通常用于HTTPS),并启用SSL(TLS)和HTTP/2协议。

  2.ssl_certificate 和 ssl_certificate_key

   ssl_certificate 指定服务器的SSL证书文件路径,路径为 /etc/pki/tls/certs/nginx.crt

   ssl_certificate_key 指定SSL证书的私钥文件路径,路径为 /etc/pki/tls/private/nginx.key

  3.server_name loadbalance.luovip.cn

   server_name 指定服务器的域名,域名为 loadbalance.luovip.cn

  4.ssl_protocols TLSv1.2 TLSv1.3;

   ssl_protocols 指定服务器支持的SSL/TLS协议版本,服务器仅支持TLSv1.2和TLSv1.3,以确保更高的安全性。

  5.ssl_ciphers ‘HIGH:!aNULL:!MD5’;

   ssl_ciphers 指定服务器支持的加密套件,使用了高强度加密套件并排除了不安全的套件(如NULL和MD5)。

  6.location /

   location 指令定义了与特定URL路径匹配的配置,匹配所有以 / 开头的请求路径。

  7.root /usr/share/nginx/html;

   root 指令指定了请求的根目录,根目录为 /usr/share/nginx/html

  8.index index.html;

   index 指令指定了默认的索引文件,默认索引文件为 index.html

2.4 测试效果

# 可以看到已经提示HTTP/2 200
[root@loadbalance ~]# curl -I -k https://loadbalance.luovip.cn
HTTP/2 200
server: nginx/1.26.2
date: Tue, 14 Oct 2025 05:33:17 GMT
content-type: text/html
content-length: 18
last-modified: Sun, 12 Oct 2025 05:16:25 GMT
etag: "68eb39a9-12"
accept-ranges: bytes

3 HTTP3.0

  HTTP/3.0是HTTP协议的最新版本,主要基于Google开发的QUIC协议。相比于之前的HTTP/2,HTTP/3带来了一些显著的改进和优势:

3.1 主要特点

  1.基于QUIC协议

   HTTP/3使用QUIC(快速UDP互联网连接)协议,而不是传统的TCP。QUIC基于UDP,可以减少连接建立的延迟,提高网络速度1。

  2.0-RTT连接

   HTTP/3支持0-RTT(零往返时间)连接,可以在建立连接时减少延迟。

  3.多路复用

   HTTP/3继续支持HTTP/2的多路复用功能,但在传输层上更加高效。

  4.连接迁移

   HTTP/3支持连接迁移,即在网络地址变化时,可以保持连接,减少重连的开销。

  5.内置TLS

   HTTP/3内置了TLS(传输层安全协议),确保数据传输的安全性。

  6.头部压缩

   HTTP/3使用QPACK进行头部压缩,优化了乱序发送的支持和压缩率。

3.2 优势

  减少网络延迟:通过0-RTT连接和QUIC协议,HTTP/3可以显著减少网络延迟。

  提高网络速度:QUIC协议的高效传输机制和多路复用功能,使得HTTP/3在高延迟和高拥塞网络环境下表现更好。

  提升网络安全:内置的TLS机制确保了数据传输的安全性。

3.3 应用场景

  HTTP/3适用于高延迟网络、高拥塞网络和高并发场景。例如,移动网络、视频流媒体、在线游戏等应用场景

3.4 配置文件案例

cat > /etc/nginx/conf.d/http3.conf <<'EOF'
server {
    # 为了提高兼容性,建议对 QUIC 和 TCP 使用相同的端口号
    listen 443 quic reuseport; # QUIC
    listen 443 ssl;            # TCP

    ssl_certificate /etc/pki/tls/certs/nginx.crt;
    ssl_certificate_key /etc/pki/tls/private/nginx.key;

    ssl_protocols TLSv1.3;

    server_name loadbalance.luovip.cn;

    root /usr/share/nginx/html;
    index index.html index.htm;

    location / {
        # 告知 QUIC 在配置端口上可用
        add_header Alt-Svc 'h3=":$server_port"; ma=86400';
        # 其他配置
    }
}
EOF

3.5 配置文件详解

  1.listen 443 quic reuseport;

   监听 443 端口上的 QUIC 协议,reuseport 可以提高并发处理性能。

  2.listen 443 ssl;

   监听 443 端口上的 TCP 协议(用于 HTTP/1.1 和 HTTP/2)。

  3.ssl_certificate 和 ssl_certificate_key

   指定 SSL 证书和私钥的文件路径。

  4.ssl_protocols TLSv1.3;

   指定支持的 SSL/TLS 协议版本。HTTP/3 要求启用 TLS 1.3。

  5.server_name 192.168.8.3;

   指定服务器名称(IP 地址或域名)。

  6.location /

   定义与根路径匹配的配置。

  7.add_header Alt-Svc ‘h3=”:$server_port”; ma=86400’;

   向客户端广告 HTTP/3 服务的可用性。ma=86400 表示这个服务可用性将在客户端缓存 86400 秒(即 1 天)。

3.6 测试效果

# 重启服务失败
[root@loadbalance ~]# systemctl restart nginx
Job for nginx.service failed because the control process exited with error code.
See "systemctl status nginx.service" and "journalctl -xeu nginx.service" for details.

# 启用SELinux的443端口
[root@loadbalance ~]# semanage port -a -t http_port_t -p udp 443
[root@loadbalance ~]# systemctl restart nginx

[root@loadbalance ~]# curl -I -k https://loadbalance.luovip.cn
HTTP/1.1 200 OK
Server: nginx/1.26.2
Date: Tue, 14 Oct 2025 05:54:56 GMT
Content-Type: text/html
Content-Length: 18
Last-Modified: Sun, 12 Oct 2025 05:16:25 GMT
Connection: keep-alive
ETag: "68eb39a9-12"
Alt-Svc: h3=":443"; ma=86400
Accept-Ranges: bytes

文章作者: 罗宇
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 罗宇 !
 上一篇
提供IP访问控制和HTTPS安全 提供IP访问控制和HTTPS安全
高性能的开源Web服务器、反向代理服务器、负载均衡器和邮件代理服务器。
2025-09-20
下一篇 
生成与使用自签名证书 生成与使用自签名证书
自签名证书是一种由用户自己创建并签署的 SSL/TLS 证书。与由认证机构(CA)签发的证书不同,自签名证书不依赖于第三方的验证和信任链,完全用自己的资源实现。
  目录