Openresty 支持 HTTP3 (QUIC)
本操作基于 Ubuntu 22.04
关于 QUIC / HTTP3
QUIC(Quick UDP Internet Connections)是一种基于UDP协议的安全传输协议,由Google开发。HTTP/3是基于QUIC协议的下一代HTTP协议。
QUIC协议的主要特点如下:
- 基于UDP协议:QUIC协议基于UDP协议,具有更低的延迟和更好的网络适应性,因为它可以使用多个UDP连接并自适应调整连接速度。
- 支持多路复用:QUIC协议支持多路复用,可以在单个连接上同时传输多个流,从而提高网络带宽利用率。
- 安全性好:QUIC协议通过TLS 1.3协议提供端到端加密和身份验证,可以防止中间人攻击和数据泄漏。
HTTP/3是基于QUIC协议的下一代HTTP协议,它的主要特点如下:
- 更快的加载速度:HTTP/3使用QUIC协议,具有更低的延迟和更好的网络适应性,因此可以更快地加载网页和应用程序。
- 多路复用:HTTP/3支持多路复用,可以在单个连接上同时传输多个流,从而提高网络带宽利用率。
- 安全性强:HTTP/3使用TLS 1.3协议提供端到端加密和身份验证,可以防止中间人攻击和数据泄漏。
- 更好的流量控制:HTTP/3支持更好的流量控制,可以减少网络拥塞和延迟,提高网络性能。
总之,QUIC和HTTP/3协议的引入将会改变网络通信的方式,提高网络性能和安全性。
备份已有的 Openresty
如果你已经安装 Openresty 了, 先备份 mv /usr/local/openresty /usr/local/openresty.bak
下载最新的 Openresty
下载最新的版本 (2024.04.16)
https://github.com/openresty/openresty/releases/download/v1.25.3.1/openresty-1.25.3.1.tar.gz
解压后可看到以下内容
解压到 /tmp/openresty
目录下
编译
--prefix=/usr/local/openresty
代表输出到/usr/local/openresty
目录, 我这里配置到这个目录是因为默认的 Openresty 就是安装到这个目录下, 由于已经备份过, 直接覆盖安装到这个目录就可以--with-http_v3_module
重要选项, 开启 http3 支持
编译
./configure --prefix=/usr/local/openresty --with-debug --with-http_stub_status_module --with-http_sub_module --with-http_v2_module --with-http_ssl_module --with-http_gzip_static_module --with-http_realip_module --with-http_mp4_module --with-http_v3_module --with-pcre-jit --with-file-aio --with-threads --with-pcre --with-stream --without-pcre2 --with-stream_ssl_module --with-stream_ssl_preread_module
安装
gmake
gmake install
配置
需要注意:
默认情况下 /etc/openresty
目录是转发到 /usr/local/openresty/nginx/conf
目录的
root@worker1:/tmp/openresty# ls -l /etc/openresty
lrwxrwxrwx 1 root root 31 Oct 26 10:53 /etc/openresty -> /usr/local/openresty/nginx/conf
因此, 在安装后配置文件已经全清空了, 需要从备份目录中拷贝过来, 这个请自行拷贝
配置 http3
server {
listen 443 ssl; # 启用 ssl
listen 443 quic; # 启用 HTTP/3
http2 on; # 启用 HTTP/2
add_header Alt-Svc 'h3=":443"; ma=86400'; # Quic或HTTP/3响应头
add_header Strict-Transport-Security "max-age=63072000; includeSubdomains; preload"; # HSTS
server_name www.jansora.com;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3; # 必须开启 TLSv1.3
ssl_certificate /etc/openresty/certs/jansora.com/www.jansora.com.pem;
ssl_certificate_key /etc/openresty/certs/jansora.com/www.jansora.com.key;
location / {
proxy_pass_header Server;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Scheme $scheme;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection upgrade;
proxy_pass http://192.168.36.100:3000;
}
}
需要注意以下事项
- HTTP3 只支持 https 协议. 因此必须配置 ssl 证书
- HTTP3 只支持 TLSv1.3 因此必须开启 TLSv1.3
更改配置后, 重启 Openresty
systemctl restart openresty
验证
确认 Protocol 显示 h3 即算成功
监控日志
tail -f /var/log/nginx/access.log
附录
-
如果是云服务器, 记得开启 443 的 UDP 端口
-
如果启用 Clash 等代理软件, 记得关闭进行验证, 因为代理软件无法代理 QUIC 协议