CentOS 7 停服后诸多不便,暂时只记录修改方式,本站暂未支持QUIC,后续更换操作系统时才考虑处理。
支持 QUIC 访问的前提条件
- 1、浏览器支持(一般主流浏览器都已经默认开启 )
测试连接是否支持地址:https://quic.nginx.org
- 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 端口。
评论区