宝塔如何开启HTTP3,启用HTTP3使用QUIC进行高性能传输
之前逛杜老师博客的时候发现底部有一个HTTP3标志,勾起了我对HTTP3的好奇心。简单来说HTTP3就是一个基于UDP的传输方式,致力于提升速度减少握手。
HTTP/3的优势解析
随着互联网的发展,HTTP协议也在不断升级,最新的HTTP/3就是一个大升级版本。相比之前的HTTP/1.1和HTTP/2,它在速度、安全性和用户体验上都大有改进。今天我们来聊聊HTTP/3为什么这么厉害,以及它是怎么一步步成了下一代网络主力的。
HTTP/3的背景故事
HTTP/3是基于一种叫QUIC的协议开发的,说白了,QUIC是一个建立在UDP上的“超级连接”协议。以前的HTTP主要靠TCP在传输,而TCP虽然老牌可靠,但它速度不算快,还有些毛病,比如慢启动、多次握手啥的。Google早就看不下去了,就搞了这个QUIC,解决TCP的缺点,又保留HTTP/2那些好用的功能,比如多路复用。
HTTP/3有哪些过人之处?
1. 连接更快,延迟更低
用传统的HTTP连接(比如HTTP/2),要搞很多次“握手”才能开始传数据,尤其是HTTPS,还得先搞定TLS加密,这一来一回特别耽误事儿。
HTTP/3就不一样了。QUIC支持0-RTT(零延迟)握手,也就是说连上一次后,再次访问的时候,数据能直接发,不需要重复那些复杂流程。少了等待时间,速度立马提上去。
2. 更稳定,不怕掉包
用HTTP/2时,如果一个数据包丢了,那整个TCP连接都会卡住,其他请求也跟着受拖累(这叫“队头阻塞”)。这对不稳定的网络,比如移动网络,简直是灾难。
HTTP/3直接甩掉了这个问题。QUIC把每条数据流分开管理,丢一个包也不会影响其他流,网页不会突然卡住,体验更流畅。
3. 天生更安全
HTTP/3天生就集成了TLS加密,而且用的是最新的TLS 1.3版本。以前的HTTP/2是加了一层“外挂”来实现加密的,而HTTP/3直接把安全性做到骨子里了。
这有什么好处?
更安全:每个HTTP/3连接都默认加密,隐私保护更好。
更快:少了加密流程中的重复步骤,连接速度也更快了。
4. 特别适合移动网络
用手机上网的时候,经常会切换网络,比如Wi-Fi换4G,这种情况用传统的TCP连接就很容易断掉,需要重连,特麻烦。
HTTP/3的QUIC协议用了一个叫连接ID的东西,网络切换时还能保持原来的连接,不需要重新来过。结果就是连接更稳定,特别适合移动场景。
5. 降低服务器压力,省钱
虽然HTTP/3实现起来比HTTP/2复杂,但它能让服务器省不少力,比如:
连接快了,服务器处理效率更高,CPU消耗更少。
队头阻塞没了,带宽利用率也更高。
对于那些内容分发网络(CDN)或者流媒体服务来说,这些改进能省下不少运营成本。
6. 用户体验更棒
最直观的感受就是——网页加载更快,视频播放更顺畅,连接更稳。对于普通用户来说,这些看得见的变化就是HTTP/3最大的魅力。
HTTP/3就是为解决旧HTTP的各种痛点而生的,它连接快、不怕掉包、还自带更强的安全性。对于用户来说,体验就是更快更稳更顺滑,而对于企业来说,效率更高还能省钱。虽然它普及还需要一点时间,但毫无疑问,HTTP/3已经是未来网络通信的趋势了。
宝塔开启HTTP3
首先确认你的宝塔Nginx版本。我们在首页找到nginx。
要求使用1.25.5及以上版本。
如果版本不够,点击进去可以切换版本
修改配置文件
我们需要ngnix支持http3,我们需要修改server块的内容。
进入nginx的配置更改位置,插入下面的配置:
1 | ssl_early_data on; |
注意!开启此项请确保项目能够防止重放攻击。
设置SSL版本
进入网站的高级设置
关闭TLS的旧版本。(TLS1.1及之前的版本)
开放443端口UDP
我们进入安全设置开启443的UDP端口。
进入云服务商开启端口
如果你是云服务器,还需要在云服务商开启端口,即使你印象里已经开启,也需要去检查一下。开启443的UDP。
为需要的网站添加QUIC监听
我们只需要在需要支持HTTP3的网站中添加一行
第一次添加的网站
1 | listen 443 quic reuseport; |
以后添加的网站
1 | listen 443 quic; |
即可。
如果你的服务器有ipv6支持(反正我的没有),通过添加下面的两行可以增加ipv6支持:
1
2 listen [::]:443 ssl;
listen [::]:443 quic;
修改宝塔自带的h3配置
宝塔自己会给每一个网站添加一行不带有h3的h3 header,导致浏览器无法识别:
1 | add_header Alt-Svc 'quic=":443"; h3-27=":443";h3-25=":443"; h3-T050=":443"; h3-Q050=":443";h3-Q049=":443";h3-Q048=":443"; h3-Q046=":443"; h3-Q043=":443"'; |
我们需要更改为:
1 | add_header Alt-Svc 'h3=":443"; ma=2592000,h3-29=":443"; ma=2592000,h3-Q050=":443"; ma=2592000,quic=":443"; ma=2592000; v="46,43"'; |
如果你使用的Nginx反代
如果你是使用Nginx反代而不是本身的传输,需要全链路QUIC传输。如果没有的话是不支持的。
但是你可以通过这个文章来绕过这个限制实现HTTP3传输。
大功告成
我们可以到 https://http3.wcode.net/ 来检测网站是否支持。
也可以到 https://http3check.net/ 来检测。(由秋风于渭水提供)
浏览器支持
通过检测网站来看还是不直观,所以我们可以在浏览器的控制台中查看。f12进入控制台,在网络标签中,下面传输数据的标题栏右键,开启协议
我们就可以看到使用的是h3传输了。
如果你没有使用h3传输,还需要查看是否是浏览器不支持。
首先确保你使用最新版本浏览器,chromium内核的浏览器访问:chrome://flags
搜索QUIC
,启用Experimental QUIC protocol
另外啊,要是你用了网络代理,系统代理的 HTTP 和 SOCKS5 都不能转发 UDP 流量,所以想用 H3 的话,那就只能把代理关了。这非常的麻烦,但是可以通过支持自动切换的代理插件实现仅在需要的站点启用。这里就不赘述了。
参考文章
[技术教程]宝塔Nginx开启支持HTTP3/QUIC协议 - 简易教程
- 感谢你赐予我前进的力量