使用 LiteSpeed 轻松为网站开启 HTTP/3 实践

简介: HTTP/3 即 QUIC(发音同Quick),通过发音我们就知道 HTTP/3 又可以让网站的速度更上一层楼。 HTTP/2 提速很重要的一点是使用了多路复用,一般来说同一域名下只需要一个 TCP 连接。

2019030723412896

前言

HTTP/3 即 QUIC(发音同Quick),通过发音我们就知道 HTTP/3 又可以让网站的速度更上一层楼。 HTTP/2 提速很重要的一点是使用了多路复用,一般来说同一域名下只需要一个 TCP 连接。但是如果当这个连接中出现了丢包的情况,那就会导致 HTTP/2 的表现情况反倒不如 HTTP/1.1 了。

如果出现丢包的情况下,整个 TCP 便会要开始等待重传,导致了后面所有数据都阻塞了。但是对于 HTTP/1.1 来说,因为可以开启多个 TCP 连接,所以出现这种情况反到也就只影响其中你们一个连接而已,剩余的 TCP 连接还可以正常传输数据。

好嘛,有问题我们就解决问题,因为我们已经见识到了多路复用的好处,所以我们就去修改 TCP 协议,不过这已经是一件不可能完成的任务了。TCP 真的是太元老了,对 TCP 进行更新意味着要从操作系统上入手,那么整个协议将不会被所有的老系统所支持,新系统的推广何其艰难。

所以谷歌就更起炉灶搞了一个基于 UDP 协议的 QUIC 协议,因为 UDP 不需要三次握手,2016年,IETF开始致力于协议的标准化。 将QUIC拆分为基于传输层的和应用层的协议。应用层协议被称为 HTTP-over-QUIC 在2018年11月,IETF宣布 HTTP-over-QUIC 被正式命名为HTTP / 3。

如果上面大段背景介绍觉得烦,我们直接看下文即可:

  1. QUIC 协议有哪些优点,如何实现 0-RTT?

    1. QUIC 协议在传输层就支持多路复用,避免了队头阻塞问题。
    2. QUIC 协议基于 UDP,更自由更高效
    3. QUIC 协议借鉴了 TFO 的思想,支持会话上下文缓存,方便恢复,具备实现 0-RTT 的可能
  2. 传统的 HTTP2 + SSL + TCP 协议栈有哪些缺点?

    1. SSL 的会话恢复依然需要一个 RTT,而且难以合并到 TCP 层
    2. TCP 的滑动窗口存在队头阻塞问题
    3. TCP 的重传纠错会浪费一个 RTT
  3. 为什么 Google 要另起炉灶,基于 UDP 去做?

    1. TCP 由操作系统实现,很难更新
    2. UDP 非常高效,几乎没有性能负担
    3. 将 QUIC 嵌入到 Chrome 中可以方便后续的升级迭代
  4. QUIC的特性究竟有哪些?

    1. 利用缓存,显著减少连接建立时间
    2. 改善拥塞控制,拥塞控制从内核空间到用户空间
    3. 没有 head of line 阻塞的多路复用
    4. 前向纠错,减少重传
    5. 连接平滑迁移,网络状态的变更不会影响连接断线。

改编自 全栈养成计划冰霜之地

实现

目前支持 QUIC 的 Web 服务软件主要是 LiteSpeed 和 Caddy,Nginx 尚不支持现有教程都是通过 Docker 结合 Nginx+Caddy 来实现,稳定性和可靠性都得打上问号。

所以我就比较推荐基于 LiteSpeed 的来实现了,LiteSpeed 是一款企业级商业 Web 服务,相比开源社区软件会有着更好的稳定性和可靠性。值得一提的是 HTTP/2 也是由 Lite Speed 率先实现的。

简单介绍:

LiteSpeed 即 LiteSpeed Web Server(简称 LSWS),是一款企业级商用 Web 服务软件,可以完美的 Apache HTTPD 兼容体验,.htaccess 规则可以直接兼容而不像 Nginx 需要重写,并兼容常用的mod扩展。得益于基于事件的架构优势,静态内容比Apache Httpd 快 5 倍 ,动态内容更是快 40 倍,HTTPS 访问快 3 倍并可以应用硬件加速器。

更多介绍请看:https://www.llstack.com/zh/LiteSpeed/

安装

这里我推荐通过 LLStack 一键包进行 Lite Speed 的安装。 安装教程:https://www.llstack.com/zh/install/

一、篇幅限制,这里以安装简单的轻量版为例。在 SSH 终端中输入:

sh -c "$(curl -fsSL https://raw.githubusercontent.com/ivmm/LLStack/master/install.sh)" 2>&1 | tee llstack-all.log

我们安装完成:

image

二、开始设置虚拟主机,运行脚本:

sh -c "$(curl -fsSL https://raw.githubusercontent.com/ivmm/LLStack/master/vhost.sh)"

详细讲解请看文档:创建虚拟主机-步骤详解

三、在第五步确认是否要开启HTTPS,输入 y 无论是 HTTP/2 还是 HTTP/3 都依赖于 HTTPS。

image

四、第六步然后会让我们输入 密钥文件(.Key)和证书文件(.crt)的路径,不一定马上就要存在,我们可以后续等创建完虚拟主机后再放到对应的路径上(会有报错,但是可以忽略)。

image

五、第七步询问是否开启 HTTP/3 功能,输入 y 为开启

image

六、然后我们输入任意键即可开始自动配置,CTRL+C 为取消

image

七、然后就可以看到输出了。

image

八、因为 HTTP/3 依赖于 UDP,而我们往往只是会开启 TCP 协议,所以我们还需要打开防火墙和安全组(没有就忽略)的UDP 443 端口。

  1. 轻量版使用 Firewall 防火墙 在终端中运行:
firewall-cmd --zone=public --add-port=443/udp --permanent
firewall-cmd --reload 
  1. 面板版在 防火墙 - 开放网络端口 中,端口输入 443 协议选择UDP,点击确定后点击重载

image

更详细的防火墙设置教程请看:防火墙设置

  1. 服务器安全组以阿里云为例: 协议类型选择 自定义UDP,端口范围443/443 ,授权对象0.0.0./0

image

九、更详细的 QUIC 设置,可以在 LiteSpeed 图形化控制台中导航至 Configuare - Server - Tuning ,对 QUIC 进行配置,一般来说新手建议默认,打开 Enable QUIC 即可

image

调试

截至发稿浏览器仅有 Chrome 支持,Firefox 和 Safari 可能得等 HTTP/3 正式发稿后会获得支持。

一、Chrome 浏览器进入 chrome://flags/ 也没,将 Experimental QUIC protocol 设置 Enable 然后重启浏览器。

image

二、 打开网站,再打开开发者工具,在 Protocol 就可以看到了,HTTP/2 + QUIC 就是 HTTP/3:

image

来自:https://www.mf8.biz/use-http-3/

目录
相关文章
|
2月前
|
算法 API UED
基于Gin框架的HTTP接口限速实践
基于Gin框架的HTTP接口限速实践
28 0
|
1月前
|
网络协议 Shell 网络安全
实验目的1.编译安装httpd2.优化路径3.并将鲜花网站上传到web服务器为网页目录4.在客户机访问网站http://www.bdqn.com
实验目的1.编译安装httpd2.优化路径3.并将鲜花网站上传到web服务器为网页目录4.在客户机访问网站http://www.bdqn.com
163 0
|
3月前
IIS上实现网站朝https://www的自动跳转
我们在做网站时时常有网站朝https://www的自动跳转的需求,以便在不输入www.子域名时也可以自动跳转到我们的当前站点,本文将介绍实现网站朝https://www的自动跳转的操作。
62 0
IIS上实现网站朝https://www的自动跳转
|
3天前
|
网络协议 Java API
深度剖析:Java网络编程中的TCP/IP与HTTP协议实践
【4月更文挑战第17天】Java网络编程重在TCP/IP和HTTP协议的应用。TCP提供可靠数据传输,通过Socket和ServerSocket实现;HTTP用于Web服务,常借助HttpURLConnection或Apache HttpClient。两者结合,构成网络服务基础。Java有多种高级API和框架(如Netty、Spring Boot)简化开发,助力高效、高并发的网络通信。
|
3月前
|
API 数据安全/隐私保护
如何使用Postman 测试Https 网站?
如何使用Postman 测试Https 网站?
|
3月前
|
安全 JavaScript API
深入理解 HTTP 和 HTTPS:提升你的网站安全性(下)
深入理解 HTTP 和 HTTPS:提升你的网站安全性(下)
深入理解 HTTP 和 HTTPS:提升你的网站安全性(下)
|
3月前
|
缓存 安全 网络安全
深入理解 HTTP 和 HTTPS:提升你的网站安全性(上)
深入理解 HTTP 和 HTTPS:提升你的网站安全性(上)
深入理解 HTTP 和 HTTPS:提升你的网站安全性(上)
|
3月前
|
缓存 前端开发 应用服务中间件
https证书已经部署到宝塔,但访问网站还显示不生效问题解决
https证书已经部署到宝塔,但访问网站还显示不生效问题解决
63 0
|
4月前
|
安全 测试技术 API
Selenium框架添加CONNECT以抓取https网站
Selenium框架添加CONNECT以抓取https网站
|
4月前
|
前端开发 JavaScript 应用服务中间件
个人博客网站如何实现https重定向(301)到http
对于个人网站站注册比较少的,服务器配置不是很好的,没必要https,https跳转到http是要时间的,会影响网站打开的速度。免费的https每年都要更换。
63 2