HTTP/3初体验

HTTP/3试用…

如果 nginx 已经是支持 HTTP/3 的版本,并且已经编译了相关模块,省流:看文末!

先上图:

Wappalyzer检测到的HTTP/3 http3check检测到的HTTP:3

成功在 CentOS 云服务器开启 HTTP/3,关键步骤在于:

当前是 CentOS 环境!

1.更新 nginx(1.16.1 -> 1.25.2)

需要至少 1.25.0 版本才支持相关模块。

  • 查看当前版本:nginx -V(当前版本已安装的所有模块名称,防止云服务器突然断联,用记事本记下,后续会用到)。
  • 添加 nginx 的官方库:
    • sudo yum install -y epel-release(安装 epel-release 软件包,获得 EPEL 项目中的额外软件包)。
    • sudo yum-config-manager --enable nginx-mainline(最新 nginx 的主线版本)。
  • 安装更新 nginx:sudo yum install -y nginx
  • 升级操作软件包:sudo yum update
  • 为了编译 nginx,安装的必要依赖:sudo yum install -y gcc make zlib-devel pcre-devel openssl-devel
  • 下载和解压源代码(官网 查阅最新版本号):
    • wget https://nginx.org/download/nginx-*1.x.x*.tar.gz
    • tar -xzvf nginx-*1.x.x*.tar.gz
    • cd nginx-1.x.x
  • 查看默认路径:ls /usr/sbin/nginx
  • 备份原有配置文件:cp -r /etc/nginx /etc/nginx_backup
  • 停止 nginx 服务:systemctl stop nginx
  • 编译:
    • ./configure –with-http_v3_module(NO)
    • 应该添加上前面 nginx -V 中的所有参数,然后再加上开启 HTTP/3 的必要模块:–with-http_v3_module,全部弄到一行,中间不要有换行符,否则模块缺失,即使编译成功也会看到很多 not found。
    • 然后,继续:
    • make
    • sudo make install
  • 覆盖安装:cp /usr/local/nginx/sbin/nginx /usr/sbin/nginx
    • 这里踩到的坑就是在执行 ./configure 命令中,有换行符,导致模块缺失,查看状态systemctl status nginx.service可以发现报错:Job for nginx.service failed because the control process exited with error code. See "systemctl status nginx.service" and "journalctl -xe" for details.,重新编译即可。
  • 验证版本:nginx -V:1.25.2 …
  • 重新启动即可:sudo systemctl restart nginx

2.修改 nginx 配置

  • 试错过程:

    根据网上各种开启版本,配置,即使用 Wappalyzer 工具检测到了,也可能在 https://http3check.net 网站检测到:server does not advertise supported http/3 or quic version on the same port.,根据 该网址 分析可能是由于配置文件中 h3-版本号,版本号过低,修改后,重新检测,继续提示:QUIC connection could not be established,QUIC 连接的问题。

    并且还发现启用 HTTP/3 时,QUIC 出错的原因:

    必须在 GUI/conf 中启用 QUIC

    必须使用启用了 QUIC 的 Chrome 或 Opera

    不得使用自签名证书,只有受信任的证书才能工作

    必须正确配置SSL设置

    必须在防火墙上打开 UDP 端口 443

    QUIC 无法与CloudFlare 等代理前端一起使用

    QUIC 仅适用于 HTTPS,不适用于 HTTP

    QUIC 可以在服务器级别、侦听器级别或虚拟主机级别启用

    QUIC 不再适用于 LSWS 5.2.8,因为 Chrome 只支持“quic/43”,而 LSWS 5.2.8 最多只支持“quic/39”

    查找资料,发现 HTTP/3 是走的 UDP 协议,云服务器默认是未开启的,需要在云服务器的安全组中加入 UDP 出入端口,继续检测,继续报错;其实,只需要在配置文件中删掉 h3 后面的版本号,然后添加监听listen 443 quic reuseport;即可。http3check 成功检测到 HTTP/3 后,还会有 Certificate Chain 板块(该域名下的证书相关信息)、QLog Output 板块。

    其实,搜索的帖子大多都是早期未更新帖子,导致浪费了很多时间,在 nginx 官网的相关模块中就有正确的配置示例。

    考虑到:

    1.部分浏览器的支持不是很好,可以查看 这里 ,可以看到 Safari 和 Safari on iOS 仅部分支持,所以,需要 TLS 版本向下兼容,所以在 nginx 配置文件中,要多配置几个版本向下兼容:ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3;

    2.在同一服务器下,配置多站点且支持 HTTP/3 时,需要避免同时使用一个端口(比如 443),nginx 检测配置会报错,配置的端口需要在 云服务器上同步开启 UDP 出入端口:

    1
    2
    nginx: [emerg] duplicate listen options for 0.0.0.0:【端口号】 in /etc/nginx/conf.d/【配置文件名】:【行号】
    nginx: configuration file /etc/nginx/nginx.conf test failed

    至此,HTTP/3 初体验结束 🔚。

rf.

nginx 下载地址

HTTP Alternative Services (Alt-Svc) Parameters

HTTP Alternative Services

Discovering an HTTP/3 Endpoint

The Transport Layer Security (TLS) Protocol Version 1.3

QUIC problems!

如何在 Nginx 中启用 HTTP 3.0/QUIC 支持

QUIC problems!

QUIC故障排查清单

HTTP/3 and QUIC FAQ

Can I use Search HTTP/3 ?

Everything You Need to Know About Qulc and HTTP3(nginx 油管视频)

总结:http 1 永远不会消失;http 2 是面向互联网的 web 服务的标准,短期内不会改变,但它未能兑现其承诺,仍在修复它,它仍然是一个新协议;http 3 + quic 是否会取代它并成为现实还有待观察。但肯定的是,接下来的几年里,我们将在互联网上同时看到所有三个版本,也将支持三个版本。预计 http 3 实际上只是用于面向互联网的服务,不希望看到它很快进入应用程序网络环境。

nginx 官网配置(省流:只看此网址即可)


2023-10-18 续更补充

当时的 CentOS 环境是 8.5,重新更换操作系统后,提示 CentOS 8 已经被停止了。原因是:Red Hat 公司在 2019 年被 IBM 收购,在 2020 年底,宣布停止支持 CentOS Linux 8,将 CentOS Linux 的未来发展方向调整为 CentOS Stream,然而这一决策引起了广泛的争议和不满,因为 CentOS Linux 8 原本被许多用户和企业视为 RHEL 的免费替代品,提供了稳定性和长期支持。CentOS Stream 不再是一个”克隆”或”二进制兼容”的版本,而是更接近 RHEL 的开发版本,具有更频繁的更新和更早的访问新特性。这个变化引发了担忧,因为用户无法像之前一样继续使用 CentOS 8 来构建稳定的服务器环境。CentOS Stream 的变化也与商业许可有关。Red Hat 提供了 RHEL 的商业版本,并希望吸引用户转向 RHEL。这个战略变化可能是为了提高对 RHEL 的市场份额。

总之,CentOS 8 的停止是由 Red Hat 公司的战略调整引发的,它导致了一系列的变化,包括 CentOS Stream 的引入和用户对替代方案的探索。

文章作者: 夜行书生
文章链接: https://yexingshusheng.com/2023/08/http-3-chu-ti-yan.html
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 夜行书生