上一篇文章记录了Nginx 开启Brotli压缩的艰难历程,本来是很简单的事,之前服务器也都是顺手就开通了。但这次因为更换了新服务器,以及升级了nginx,所以遇到很多预料之外的问题。不过既然nginx已经升级1.25(两个小时后又升级了1.26…),一下午也已经浪费掉了,那就把http3开通了吧,反正顺手的事。
1. 升级Nginx到1.25.5版本
首先升级到nginx1.25以及以上(建议直接升级到1.26.2稳定版,修复了一些针对HTTP3/QUIC的漏洞),既然已经使用宝塔面板了,那就直接在后台软件列表里升级好了,需要编译安装,这个很简单(记得升级完再检查一下Brotli还有没有……)。
2. 修改站点配置文件
接下来随便打开一个长期运行的网站,用来监控端口,打开网站设置,配置文件,在server块里,添加以下代码:
listen 443 ssl;
listen 443 quic reuseport;
listen [::]:443 ssl;
listen [::]:443 quic reuseport;
http2 on;
仅需一个站点开启监听,其他站点的配置如下即可:
listen 443 ssl;
listen 443 quic;
listen [::]:443 ssl;
listen [::]:443 quic;
http2 on;
其中包含“ [::]:
”的是针对ipv6的设置,根据自己实际情况选择是否添加,在站点的Nginx配置文件 大概26 27行添加以下代码
ssl_early_data on; # ssl_early_data on;虽然可以提高性能,但其安全风险(重放攻击)可能超过它的好处,不适合包含敏感信息的网站。
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"';
修改SSL版本
#把原 ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3;中的TLSv1.1以下版本的删掉, TLSv1.1 已经被淘汰了,密码套件也更新了
ssl_protocols TLSv1.2 TLSv1.3;
在这里遇到几个坑,大家遇到网上的教程,最好尽量理解一下代码的含义,很多时候教程不完全可靠。可能是作者手误,也可能环境问题,导致看上去很简单的问题,总有一个坎让你跳过去,特别浪费时间。
4. 确认UDP 443端口已开放
确认服务器防火墙和云服务防火墙(如果有的话)已经放行UDP 443端口,以允许QUIC流量通过。
宝塔面板:防火墙将443端口UDP开放 宝塔在面板→左侧→安全里面配置
云服务器:腾讯云 / 阿里云 / 华为云 等 添加安全组即可
5. 测试站点是否支持HTTP/3
配置完成后,可以使用curl或者在线工具:https://http3.wcode.net,测试站点是否已经成功支持HTTP/3。