侧边栏壁纸
  • 累计撰写 273 篇文章
  • 累计创建 141 个标签
  • 累计收到 16 条评论

目 录CONTENT

文章目录

博客支持HTTP3 QUIC

Sherlock
2021-03-19 / 0 评论 / 0 点赞 / 4 阅读 / 0 字
温馨提示:
部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

CentOS 7 停服后诸多不便,暂时只记录修改方式,本站暂未支持QUIC,后续更换操作系统时才考虑处理。

支持 QUIC 访问的前提条件

  • 1、浏览器支持(一般主流浏览器都已经默认开启 )

    测试连接是否支持地址:https://quic.nginx.org
    nginx-quic-test.png

  • 2、网络运营商 支持 UDP
  • 3、排除代理可能的干扰(需关掉代理)

Nginx 开启 QUIC

Nginx 从 1.25.0 版本开始已支持 QUIC 和 HTTP/3 协议,需要先升级
CentOS 7 RPMs 包

升级 Nginx

# 添加Nginx官方仓库
rpm --import https://nginx.org/keys/nginx_signing.key
echo '[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/7/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key' > /etc/yum.repos.d/nginx.repo

# 执行更新
yum upgrade -y nginx

官方源默认未开启quic,需要自行编译

# 安装依赖
yum install patch wget make gcc gcc-c++ gcc-gfortran kernel-devel ncurses ncurses-devel gd gd-devel libicu lua zlib-devel openssl-devel pcre-devel perl-IPC-Cmd -y

#注:perl-IPC-Cmd 为openssl-quic中的依赖需求必须安装

# 下载源码包并解压
wget https://nginx.org/download/nginx-1.27.0.tar.gz
tar -xzf nginx-1.27.0.tar.gz

# 下载quicssl库依赖并解压
wget https://github.com/quictls/openssl/archive/refs/tags/openssl-3.1.5-quic1.tar.gz
tar -xzf openssl-3.1.5-quic1.tar.gz 

# 进入nginx源码目录开始构建
cd nginx-1.27.0

# 配置构建参数
./configure --prefix=/etc/nginx --sbin-path=/usr/sbin/nginx --modules-path=/usr/lib64/nginx/modules --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid --lock-path=/var/run/nginx.lock --http-client-body-temp-path=/var/cache/nginx/client_temp --http-proxy-temp-path=/var/cache/nginx/proxy_temp --http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp --http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp --http-scgi-temp-path=/var/cache/nginx/scgi_temp --user=nginx --group=nginx --with-compat --with-file-aio --with-threads --with-http_addition_module --with-http_auth_request_module --with-http_dav_module --with-http_flv_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_mp4_module --with-http_random_index_module --with-http_realip_module --with-http_secure_link_module --with-http_slice_module --with-http_ssl_module --with-http_stub_status_module --with-http_sub_module --with-http_v2_module --with-mail --with-mail_ssl_module --with-stream --with-stream_realip_module --with-stream_ssl_module --with-stream_ssl_preread_module --with-http_v3_module --with-cc-opt=-I../openssl-openssl-3.1.5-quic1/include --with-ld-opt=-L../openssl-openssl-3.1.5-quic1/lib --with-openssl=../openssl-openssl-3.1.5-quic1

# 构建并安装
make & make install

# 配置用户组
useradd -M nginx

# 创建缺失的目录
mkdir -p /var/cache/nginx/client_temp
mkdir -p /var/log/nginx
mkdir -p /usr/lib64/nginx/modules //此目录非必须,该目录为添加动态模块用途

# 配置开机启动
echo '[Unit]
Description=nginx - high performance web server
Documentation=https://nginx.org/en/docs/
After=network-online.target remote-fs.target nss-lookup.target
Wants=network-online.target

[Service]
Type=forking
PIDFile=/var/run/nginx.pid
ExecStart=/usr/sbin/nginx -c /etc/nginx/nginx.conf
ExecReload=/bin/sh -c "/bin/kill -s HUP $(/bin/cat /var/run/nginx.pid)"
ExecStop=/bin/sh -c "/bin/kill -s TERM $(/bin/cat /var/run/nginx.pid)"

[Install]
WantedBy=multi-user.target' > /usr/lib/systemd/system/nginx.service

systemctl daemon-reload
systemctl enable nginx
systemctl start nginx

修改配置文件

server区域添加

精简版

server
{
  listen 443 quic reuseport;
  add_header Alt-Svc 'h3=":443"; ma=2592000, quic=":443"; ma=2592000';
  ssl_protocols TLSv1.2 TLSv1.3;#确保这行有TLS1.3,因为HTTP/3需要在TLS1.3上运行。
}

复杂版

server
{
  listen 443 quic reuseport;
  http3 on;
  quic_gso on;
  ssl_stapling on;
  ssl_stapling_verify 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_protocols TLSv1.2 TLSv1.3; #确保这行有TLS1.3,因为HTTP/3需要在TLS1.3上运行。
}

协议比较全的

add_header Alt-Svc 'quic=":443"; h3=":443"; h3-29=":443"; h3-27=":443";h3-25=":443"; h3-T050=":443"; h3-Q050=":443";h3-Q049=":443";h3-Q048=":443"; h3-Q046=":443"; h3-Q043=":443"';

修改完及得重启 Nginx

指令说明

  • listen 443 quic reuseport;

    这行指令告诉 Nginx 在端口 443 上监听传入的 QUIC 连接,这是 HTTP/3 协议所使用的传输层协议。
    quic 参数指定 Nginx 监听 QUIC 流量。
    reuseport 参数允许多个 Nginx 工作进程或线程绑定到同一个端口,这可以提高性能,特别是在多核服务器上,因为它允许操作系统将传入的连接分配给多个进程。

  • http3 on;

    如果Nginx版本是 1.19 或更高,并且已经通过 ssl_protocols 指令启用了 TLS 1.3,那么通常不需要额外的 http3 on; 指令,因为 HTTP/3 支持已经默认启用。

  • quic_gso on;

    这个指令用于启用 QUIC 协议的 Generic Segmentation Offset (GSO) 功能,它可以提高 QUIC 协议的数据传输效率。

  • ssl_early_data on;

    这一行启用了TLS 1.3的早期数据功能,允许客户端在TLS握手过程中发送早期数据,这可以减少往返时间,提高连接效率。

  • ssl_stapling on;

    这个指令启用了 OCSP Stapling 功能。OCSP Stapling 是一种优化,它允许服务器在 SSL/TLS 握手过程中提供证书状态信息,而无需客户端单独查询 OCSP 服务器。这样,客户端可以更快地验证证书的有效性,并且减少了网络请求的次数。

  • ssl_stapling_verify on;

    启用 ssl_stapling_verify 可以提供额外的安全层,因为它确保 OCSP 响应是由可信的 CA(证书颁发机构)签发的,并且没有被篡改。

  • add_header Alt-Svc

    h3=":443"; ma=2592000:表示服务器支持HTTP/3协议,监听在443端口,ma(max-age)参数表示这个信息的有效时间是2592000秒(约30天)。

    h3-29=":443"; ma=2592000:表示服务器支持基于TLS 1.2的HTTP/3协议,监听在443端口,ma参数同样表示信息的有效时间。

    h3-Q050=":443"; ma=2592000:表示服务器支持基于TLS 1.3的HTTP/3协议,监听在443端口,ma参数表示信息的有效时间。

    quic=":443"; ma=2592000:表示服务器支持QUIC协议,监听在443端口,ma参数表示信息的有效时间。

    v="46,43":表示支持的HTTP版本,46代表HTTP/3,43代表HTTP/2。

开放端口

确认服务器防火墙或安全组已经放行 UDP 443 端口,以允许QUIC流量通过。

如果有用宝塔等面板,也需要在防火墙放行 UDP 443 端口。

验证 HTTP3 生效:

0
  1. 支付宝打赏

    qrcode alipay
  2. 微信打赏

    qrcode weixin

评论区