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.
,重新编译即可。
- 这里踩到的坑就是在执行 ./configure 命令中,有换行符,导致模块缺失,查看状态
- 验证版本:
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
2nginx: [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.
HTTP Alternative Services (Alt-Svc) Parameters
Discovering an HTTP/3 Endpoint
The Transport Layer Security (TLS) Protocol Version 1.3
如何在 Nginx 中启用 HTTP 3.0/QUIC 支持
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 的引入和用户对替代方案的探索。