Openresty 支持HTTP/3协议和QUIC配置

0x01 HTTP/3.0协议说明

2012 年,Google 就设计出了QUIC协议,在浏览器以及服务器端服务上部署并实现。2021 年 5 月, IETF在RFC 9000中对 QUIC 进行了标准化。2022 年 6 月 7 日,HTTP/3 被标准化为 RFC 9114。

快速 UDP 网络连接(QUIC)是一种通用传输层协议,旨在通过其灵活性、内置的安全防护、较少的性能问题以及更快的采用率来取代传输控制协议(TCP)。QUIC 最初由谷歌开发,采用用户数据协议(UDP)作为在客户端和服务器之间移动数据包的低级别传输机制。另外值得注意的是,QUIC 集成了传输层安全防护(TLS),将其作为一个集成组件,而不是像 HTTP/1.1 和 HTTP/2 那样将其作为一个附加层。

​基于 QUIC 的 HTTP/3 是超文本传输协议(HTTP)的第三个主要版本,于 2022 年被采纳为 IETF 标准。创建 QUIC+HTTP/3 是为了解决 TCP 固有的性能限制和用户体验的问题。QUIC协议解决了队头阻塞问题,以及缩短建立连接的时间。

0x02 Openresty安装

注意:Openresty1.25.1后才支持HTTP3.0.

1.安装openresty

bash 复制代码
sudo yum install yum-utils
sudo yum-config-manager --add-repo https://openresty.org/package/centos/openresty.repo

修改 vim /etc/yum.repos.d/openresty.repo

2.安装运行

bash 复制代码
sudo yum install openresty
sudo systemctl start openresty
sudo systemctl enable openresty

0x03 支持HTTP3.0配置

1.准备好域名及域名ssl证书

2.验证是否支持HTTP3.0

3.增加虚拟主机配置

配置如下

bash 复制代码
server {

    listen 443 quic reuseport; # 配置支持quic协议
    listen       443 ssl;
    http3 on;
    http2 on;
    server_name  xx.xxx.com; #域名
    #ssl on;
    ssl_certificate      xx.xxx.crt;
    ssl_certificate_key  xx.xxx.key;
    ssl_session_cache    shared:SSL:10m;
    ssl_session_timeout  120m;
    ssl_protocols  TLSv1.3 TLSv1.2;   #http3使用TLSV1.3协议
    ssl_ciphers  HIGH:!RC4:!MD5:!aNULL:!eNULL:!NULL:!DH:!EDH:!EXP:+MEDIUM;
    ssl_prefer_server_ciphers  on;
    add_header Alt-Svc 'h3=":443"; ma=2592000'; #头部增加header
    location / {
        root /home/workspace/frontend/dist;
        index  index.html;
         if (!-e $request_filename) {
                        rewrite ^/(.*)$ /index.html last;
                }
        }

}

4.检验生效

bash 复制代码
openresty -t
openresty -s reload

5.检查端口生效

bash 复制代码
lsof -i:443

可以看到有有UDP协议

bash 复制代码
nginx     1176 root   10u  IPv4 118939904      0t0  UDP *:https 
nginx   870027  www   11u  IPv4 118939905      0t0  UDP *:https 
nginx   870028  www   12u  IPv4 118939906      0t0  UDP *:https 
nginx   870029  www   13u  IPv4 118939907      0t0  UDP *:https 
nginx   870026  www   10u  IPv4 118939904      0t0  UDP *:https 

0x04访问检查

1.Chrome浏览器配置

注意:浏览器可能默认没有打开QUIC和HTTP3.0支持,需要手动打开,

打开方式,浏览器地址栏

chrome://flags

把这两个参数打开Enabled

bash 复制代码
Experimental QUIC protocol
WebTransport Developer Mode

设置好后,需要重启浏览器。

2.打开网站访问

按F12打开调试模式,刷新页面,可以看到Network请求的Protocol变成了h3

FAQ:配置了浏览器未生效

如果是云服务器,需要打开UDP443端口的访问限制,服务器如果设置了防火墙也需要打开。

相关推荐
80s7773 小时前
什么是动态IP?静态IP和动态IP有什么区别?
网络·网络协议·tcp/ip
IPdodo_8 小时前
代理 IP 服务商 SLA 怎么验?7 项指标与 Python 探测脚本实战
运维·python·网络协议·网络安全·代理ip
夜月yeyue9 小时前
SOME/IP-SD 服务发现故障
网络·单片机·网络协议·tcp/ip·安全·服务发现
2501_9160088910 小时前
iOS App 请求地址查看,不用配置看到 App 调了哪些接口
网络协议·计算机网络·网络安全·ios·adb·https·udp
爱学堂IT分享13 小时前
码神之路-Netty-从零实现RPC框架+SpringBoot实战项目教程
spring boot·网络协议·rpc
Shawn Dev15 小时前
没有公网 IP,如何让家里的服务器通过域名访问?——Cloudflare Tunnel 实战指南
服务器·网络协议·tcp/ip
幻步智能网络云专线15 小时前
幻步智能网络专线的优势
网络·网络协议
深圳市宝华视联1 天前
Python 读取 IP 视频流简单 Demo
python·嵌入式硬件·opencv·网络协议·tcp/ip·实时音视频·嵌入式实时数据库
DLYSB_1 天前
让 PLC“开口说话”:基于 Modbus TCP 的声光语音告警设计与 Python 调试
python·网络协议·tcp/ip·报警灯
见山是山-见水是水2 天前
围绕HTTP 网络请求实战构建原生体验:设计取舍、实现与排错
网络·网络协议·http·华为·harmonyos