Debian/Ubuntu 构建 Nginx 添加 QUIC 支持
安装编译依赖环境,本文用 Debian12.x 和 Ubuntu20.04 做测试验证。
sudo apt install build-essential ca-certificates zlib1g-dev libpcre3 libpcre3-dev tar unzip libssl-dev mercurial libunwind-dev pkg-config make cmake golang gcc git wget
说明:Debian 如果采用
root
用户登录则不需要增加sudo
来安装,Ubuntu 同理。
编译 HTTP/3/QUIC 需要的依赖(可选)
克隆依赖库(使用 Gitee 镜像)
git clone https://gitee.com/fenghuolingyun/boringssl.git
- 原始仓库地址:
git clone https://boringssl.googlesource.com/boringssl
开始编译依赖:
cd boringssl
mkdir build
cd build
cmake -DCMAKE_BUILD_TYPE=Release ..
make
注意:这里有可能由于网络原因导致
golang
模块无法拉取而报错。我们添加代理支持,使用阿里云代理:
export GO111MODULE=on
export GOPROXY=https://mirrors.aliyun.com/goproxy/
然后执行 make
,完成后返回上级目录:
cd ../../
下载 Nginx 源码(版本可替换)
wget https://nginx.org/download/nginx-1.25.4.tar.gz
开始编译操作:
tar -xf nginx-1.25.4.tar.gz
cd nginx-1.25.4
配置构建参数(全模块配置):
./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=c++ \
--with-cc-opt='-I../boringssl/include -x c' \
--with-ld-opt='-L../boringssl/build'
执行编译安装:
make && make install
创建缺失的目录:
mkdir -p /var/cache/nginx/
mkdir -p /var/log/nginx/
mkdir -p /usr/lib/nginx/modules # 此目录非必须,方便后续添加动态加载类型模块
添加 nginx
用户组:
useradd -m nginx
编写 systemd 服务文件(用于 systemctl 管理):
nano /usr/lib/systemd/system/nginx.service
将以下内容粘贴进去:
[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
重载 systemd 并管理服务:
systemctl daemon-reload
现在你可以使用 systemctl
管理我们编译的 Nginx:
配置开机启动
systemctl enable nginx
执行启动
systemctl start nginx
停止 Nginx 服务
systemctl stop nginx
重启 Nginx 服务
systemctl restart nginx
显示 Nginx 服务的状态
systemctl status nginx
禁用 Nginx 服务,使其不会在系统启动时自动启动
systemctl disable nginx