Debian编译安装nginx-quic

image.png

nginx-quic 是为了让 nginx 支持 HTTP/3 协议,也就是基于 QUIC 的新一代网络传输协议。QUIC 是一种使用 UDP 协议实现的多路复用和可靠传输的协议,它可以提高网络速度和安全性,减少延迟和拥塞

要编译 nginx-quic,你需要选择一个提供 QUIC 支持的 SSL 库,比如 BoringSSL, LibreSSLQuicTLS。这些库都是基于 OpenSSL 的分支,但是有不同的特点和优化

系统环境 :Ddian10

1.QUIC 支持的 SSL 库

可以根据前三篇文章操作
# Debian编译BoringSSL
# Debian安装quictls替换openssl
# Debian安装LibreSSL替换openssl

这是我编译好的可以直接下载,然后上传到服务器里使用
image.png

2. 系统更新和准备环境

首先,更新系统软件包并安装必要的依赖项:

apt install build-essential libtool automake autoconf zlib1g-dev libpcre3-dev libssl-dev libxml2-dev libxslt1-dev libgd-dev libgeoip-dev libgoogle-perftools-dev libperl-dev libpam0g-dev libpcre++-dev libcurl4-openssl-dev libyajl-dev libmaxminddb-dev liblmdb-dev git

3.下载 nginx-quic

https://hg.nginx.org/nginx-quic

wget https://hg.nginx.org/nginx-quic/archive/tip.tar.gz
tar -xf tip.tar.gz
cd cd nginx-quic/

4.QuicTLS配置

要求先安装# Debian安装quictls替换openssl

/usr/local/ssl是我放QuicTLS的目录根据请实际情况填写
-static:此选项指示链接器链接静态库而不是动态库。静态库是直接包含在可执行文件中的库,而动态库在运行时加载。使用-static标志,生成的可执行文件将不依赖于指定的库的外部依赖关系,因为它们将以静态方式包含在其中

-static 添加了编译好的nginx二进制文件会比较大,不添加该选项运行nginx 时需要有对应的ssl库目录。

编译需要其他选项或者模块可以参考这里# Debian编译安装Nginx

./configure
    --with-debug
    --with-http_v3_module
    --with-cc-opt="-I/usr/local/ssl/include" \
    --with-ld-opt="-L/usr/local/ssl/lib64 -static"
    ...

5.LibreSSL配置

要求先安装# Debian安装LibreSSL替换openssl

其他的和上面一样

./configure
    --with-debug
    --with-http_v3_module
    --with-cc-opt="-I/usr/local/ssl/include" \
    --with-ld-opt="-L/usr/local/ssl/lib -static"
    ...

5.BoringSSL配置

要求先安装# Debian编译BoringSSL

./configure
    --with-debug
    --with-http_v3_module
    --with-cc-opt="-I/usr/local/ssl/include"
    --with-ld-opt="-L/usr/local/ssl/ssl -L/usr/local/ssl/crypto -static"
    ...

这边使用-static 选项编译完成后会有一个glibc 警告,去掉-static选项则不出现警告

warning: Using 'dlopen' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking
...

在静态链接应用程序中使用 "dlopen "时,运行时需要链接所用 glibc 版本的共享库
chatGTP的回答是是:glibc 中的某些函数(如dlopen)与静态链接不完全兼容。这些函数可能依赖于在运行时加载其他共享库,或者使用其大小可能在不同版本的 glibc 之间变化的数据结构。当这些函数在静态链接的应用程序中使用时,如果运行时环境的 glibc 版本与链接期间使用的版本不同,则可能会导致意外行为甚至崩溃。
如果您忽略此警告并运行编译后的 NGINX,如果运行时环境的 glibc 版本与用于编译/链接的版本相同或更新,则它可能会正常工作。然而,也存在潜在的风险:

  1. 不兼容性 :如果您的程序在具有不兼容版本的 glibc 的系统上运行(即较旧或明显不同),则它可能无法正确运行。这可能会导致崩溃或意外行为。
  2. 缺少功能 :依赖的某些功能getaddrinfo可能无法按预期工作,因为该功能可能依赖于运行时动态加载的库。
  3. 难以调试的问题 :如果确实因此问题而出现问题,则可能很难诊断和调试,因为它们源于应用程序和系统 C 库之间的低级交互。

6.配置nginx-quic

站点的server块内加入以下内容开启quic

server {
    ...
 	listen 443 ssl;
	listen [::]:443 ssl;
	listen 443 quic reuseport;
	listen [::]:443 quic reuseport;
        http2 on;
        add_header Alt-Svc 'h3=":443"; ma=86400';
        quic_retry on;
        ssl_early_data on;
    ...
}

请注意 listen 443 quic reuseport 里的 reuseport 参数,所有 server 段里,只允许一个段出现 reuseport 参数,否则会报错。

另外 listen 段里的 ssl 无法和 quic 放一起,必须分开写,http2 也需要单独写一行了。

测试 打开浏览器F12 安全性
image.png

https://http3check.net/ 这个网站可以查询网站是否支持HTTP3
image.png

参考:
https://lala.im/8679.html
https://hg.nginx.org/nginx-quic
https://docshome.gitbook.io/nginx-docs/readme/quic-he-http3-zhi-chi
https://nginx.org/en/docs/quic.html#building

# boringssl 

本文由:星际难民
实践,测试,整理发布.如需转载请注明地址 本文标题:Debian编译安装nginx-quic
地址:https://530503.xyz/articles/2023/08/30/1693390012768.html

评论

取消