NGINX系列(十) 开启HTTP2.0和HTTP3.0功能
NGINX系列(十) 开启HTTP2.0和HTTP3.0功能
1 | 作者:李晓辉 |
环境介绍
操作系统 | IP地址 | 主机名 | NGINX版本 | 角色 |
---|---|---|---|---|
Rocky9.4 | 192.168.8.3 | loadbalance.xiaohui.cn | 1.26.2 | 负载均衡 |
在本文中,我们将深入探讨如何在NGINX服务器中启用HTTP/2.0和HTTP/3.0。通过启用这些新一代的HTTP协议,可以显著提升网站的加载速度和安全性。HTTP/2.0引入了多路复用、首部压缩等技术,而HTTP/3.0更是基于QUIC协议,进一步减少延迟,提高传输效率。
HTTP2.0
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的性能优势,还能确保数据传输的安全性。
我们离线测试就用自己生成的自签名证书就好,关于如何生成自签名证书,可查看我这篇文章:如何生成和使用自签名证书
配置文件案例
1 | cat > /etc/nginx/conf.d/http2.conf <<EOF |
配置文件详解
listen 443 ssl http2;
- 这个指令表示服务器将监听443端口(通常用于HTTPS),并启用SSL(TLS)和HTTP/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
。
server_name loadbalance.xiaohui.cn
server_name
指定服务器的域名。在这个示例中,域名为loadbalance.xiaohui.cn
。
ssl_protocols TLSv1.2 TLSv1.3;
ssl_protocols
指定服务器支持的SSL/TLS协议版本。在这个示例中,服务器仅支持TLSv1.2和TLSv1.3,以确保更高的安全性。
ssl_ciphers ‘HIGH:!aNULL:!MD5’;
ssl_ciphers
指定服务器支持的加密套件。在这个示例中,使用了高强度加密套件并排除了不安全的套件(如NULL和MD5)。
location /
location
指令定义了与特定URL路径匹配的配置。在这个示例中,匹配所有以/
开头的请求路径。
root /usr/share/nginx/html;
root
指令指定了请求的根目录。在这个示例中,根目录为/usr/share/nginx/html
。
index index.html;
index
指令指定了默认的索引文件。在这个示例中,默认索引文件为index.html
。
测试效果
可以看到已经提示HTTP/2 200
1 | [root@loadbalance ~]# curl -I -k https://loadbalance.xiaohui.cn |
HTTP3.0
HTTP/3.0是HTTP协议的最新版本,主要基于Google开发的QUIC协议。相比于之前的HTTP/2,HTTP/3带来了一些显著的改进和优势:
主要特点
基于QUIC协议:HTTP/3使用QUIC(快速UDP互联网连接)协议,而不是传统的TCP。QUIC基于UDP,可以减少连接建立的延迟,提高网络速度1。
0-RTT连接:HTTP/3支持0-RTT(零往返时间)连接,可以在建立连接时减少延迟。
多路复用:HTTP/3继续支持HTTP/2的多路复用功能,但在传输层上更加高效。
连接迁移:HTTP/3支持连接迁移,即在网络地址变化时,可以保持连接,减少重连的开销。
内置TLS:HTTP/3内置了TLS(传输层安全协议),确保数据传输的安全性。
头部压缩:HTTP/3使用QPACK进行头部压缩,优化了乱序发送的支持和压缩率。
优势
减少网络延迟:通过0-RTT连接和QUIC协议,HTTP/3可以显著减少网络延迟。
提高网络速度:QUIC协议的高效传输机制和多路复用功能,使得HTTP/3在高延迟和高拥塞网络环境下表现更好。
提升网络安全:内置的TLS机制确保了数据传输的安全性。
应用场景
HTTP/3适用于高延迟网络、高拥塞网络和高并发场景。例如,移动网络、视频流媒体、在线游戏等应用场景
配置文件案例
1 | cat > /etc/nginx/conf.d/http3.conf <<'EOF' |
配置文件详解
详细解释:
listen 443 quic reuseport;
- 监听 443 端口上的 QUIC 协议,
reuseport
可以提高并发处理性能。
- 监听 443 端口上的 QUIC 协议,
listen 443 ssl;
- 监听 443 端口上的 TCP 协议(用于 HTTP/1.1 和 HTTP/2)。
ssl_certificate 和 ssl_certificate_key
- 指定 SSL 证书和私钥的文件路径。
ssl_protocols TLSv1.3;
- 指定支持的 SSL/TLS 协议版本。HTTP/3 要求启用 TLS 1.3。
server_name 192.168.8.3;
- 指定服务器名称(IP 地址或域名)。
location /
- 定义与根路径匹配的配置。
add_header Alt-Svc ‘h3=”:$server_port”; ma=86400’;
- 向客户端广告 HTTP/3 服务的可用性。
ma=86400
表示这个服务可用性将在客户端缓存 86400 秒(即 1 天)。
- 向客户端广告 HTTP/3 服务的可用性。
测试效果
如果服务起不来,可以启用SELinux的443端口
1 | semanage port -a -t http_port_t -p udp 443 |
在浏览器中打开页面,将会提示以下字段
1 | alt-svc: h3=":443"; ma=86400 |