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 协议

    评论栏