Openresty 支持 HTTP3 (QUIC)

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

解压后可看到以下内容

image.png

解压到 /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;
    }

}

需要注意以下事项

  1. HTTP3 只支持 https 协议. 因此必须配置 ssl 证书
  2. HTTP3 只支持 TLSv1.3 因此必须开启 TLSv1.3

更改配置后, 重启 Openresty

systemctl restart openresty

验证

打开 https://www.jansora.com/

确认 Protocol 显示 h3 即算成功

image.png

监控日志

tail -f /var/log/nginx/access.log 

image.png

附录

  1. 如果是云服务器, 记得开启 443 的 UDP 端口

  2. 如果启用 Clash 等代理软件, 记得关闭进行验证, 因为代理软件无法代理 QUIC 协议

评论栏