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