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

本文涉及的产品
云防火墙,500元 1000GB
简介: 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/

目录
相关文章
|
6月前
|
网络协议 Shell 网络安全
实验目的1.编译安装httpd2.优化路径3.并将鲜花网站上传到web服务器为网页目录4.在客户机访问网站http://www.bdqn.com
实验目的1.编译安装httpd2.优化路径3.并将鲜花网站上传到web服务器为网页目录4.在客户机访问网站http://www.bdqn.com
215 0
|
27天前
|
Rust 前端开发 API
Tauri 开发实践 — Tauri HTTP 请求开发
本文介绍了如何在 Tauri 中发起 HTTP 请求。首先通过安装 Tauri 生态中的工具包并配置 `tauri.conf.json` 文件来允许特定域名的 HTTP 通信。接着封装了一个简单的 HTTP 客户端类,并在页面中使用该客户端实现 GET 和 POST 请求。最后提供了完整的源码地址以供参考。此功能使得桌面应用能够与远程服务器进行交互,增强了应用的实用性。
74 1
Tauri 开发实践 — Tauri HTTP 请求开发
|
14天前
|
存储 缓存 NoSQL
保持HTTP会话状态:缓存策略与实践
保持HTTP会话状态:缓存策略与实践
|
29天前
|
存储 JSON API
HTTP 请求与响应处理:C#中的实践
【10月更文挑战第4天】在现代Web开发中,HTTP协议至关重要,无论构建Web应用还是API开发,都需要熟练掌握HTTP请求与响应处理。本文从C#角度出发,介绍HTTP基础知识,包括请求与响应结构,并通过`HttpClient`库演示如何发送GET请求及处理响应,同时分析常见错误并提供解决方案,助你更高效地完成HTTP相关任务。
78 2
|
1月前
|
存储 缓存 监控
HTTP:强缓存优化实践
HTTP强缓存是提升网站性能的关键技术之一。通过精心设计缓存策略,不仅可以显著减少网络延迟,还能降低服务器负载,提升用户体验。实施上述最佳实践,结合持续的监控与调整,能够确保缓存机制高效且稳定地服务于网站性能优化目标。
44 3
|
3月前
|
Web App开发 缓存 JSON
在打开网站时,HTTP请求流程是如何处理的
【8月更文挑战第20天】流程包括:构建请求(如`GET /index.html HTTP/1.1`)、检查本地缓存、获取服务器IP及端口、等待TCP连接队列、建立TCP连接、发送HTTP请求。服务器处理后返回数据与响应头,可选择保持连接开启以便后续请求重用,最后断开TCP连接。
|
4月前
|
测试技术 Python
我们假设要测试一个名为`http://example.com`的网站,并对其进行简单的GET请求性能测试。
我们假设要测试一个名为`http://example.com`的网站,并对其进行简单的GET请求性能测试。
|
5月前
|
程序员 API 开发者
Socket与HTTP协议的实践
【6月更文挑战第4天】本文介绍了Python中的网络编程,包括Socket编程和基于HTTP协议的实践。Socket编程是网络通信的基础,Python的`socket`模块简化了其使用。文中展示了服务器和客户端的简单示例,以及如何通过多线程处理多个客户端连接。另外,文章讨论了HTTP协议,推荐了`requests`库,并给出了发送GET和POST请求的例子。最后,总结了Socket编程和HTTP协议在网络编程中的应用及其在Web开发和API交互中的重要性。
62 5
|
6月前
|
Android开发 数据安全/隐私保护 iOS开发
ios和安卓测试包发布网站http://fir.im的注册与常用功能
ios和安卓测试包发布网站http://fir.im的注册与常用功能
270 0
ios和安卓测试包发布网站http://fir.im的注册与常用功能
|
6月前
|
网络协议 算法 Java
Java中如何通过代理实现对HTTP2网站的访问?
Java中如何通过代理实现对HTTP2网站的访问?

热门文章

最新文章