centos8构建nginx1.27.1+BoringSSL+http3+lua+openresty

需要接入http3,索性最新的nginx在构建一波,趟一遍坑

准备工作

1.环境命令安装

sh 复制代码
yum install GeoIP -y
yum install GeoIP-devel -y
yum install libmaxminddb-devel -y
yum install -y patch wget zlib zlib-devel lftp gcc gcc-c++ make openssl-devel pcre-devel pcre net-tools yum-utils && yum clean all

2.最新nginx包下载
官方下载

3.准备boringssl
官网

sh 复制代码
# 下载使用git
git clone https://boringssl.googlesource.com/boringssl

4.准备ninja 用于构建boringssl
ninja-github-releases

sh 复制代码
unzip xx.zip
cp ./ninja /usr/bin

5.lua环境构建(可选)

需要以下这些包-可以在github下载相应的包

luajit2

lua-resty-core

lua-resty-lrucache

sh 复制代码
cd /opt/luajit2-2.1-20240815
make PREFIX=/usr/local/ && make install PREFIX=/usr/local/

cd /opt/lua-resty-core-0.1.29
make install LUA_LIB_DIR=/usr/local/share/lua/5.1

cd /opt/lua-resty-lrucache-0.14
make install LUA_LIB_DIR=/usr/local/share/lua/5.1

#设置环境变量
LUAJIT_INC=/usr/local/include/luajit-2.1
LUAJIT_LIB=/usr/local/lib

#构建映射
ln -s /usr/local/lib/libluajit-5.1.so.2 /lib64/
ln -s /usr/local/openresty/lualib /usr/local/lib/lua
ln -s /usr/local/openresty/lualib/resty /usr/local/lib

6.正向代理(可选)

使用ngx_http_proxy_connect_module 需要先安装补丁

sh 复制代码
patch -p1 </opt/ngx_http_proxy_connect_module-0.0.7/patch/proxy_connect_rewrite_102101.patch

编译nginx

sh 复制代码
cd /opt/nginx-1.27.1
./configure --prefix=/etc/nginx --sbin-path=/usr/sbin/nginx --modules-path=/usr/lib/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_v3_module --with-cc=c++ --with-cc-opt="-I/opt/boringssl/include -x c"  --with-ld-opt="-L/opt/boringssl/build/ssl -L/opt/boringssl/build/crypto" --with-http_ssl_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_stub_status_module --with-http_sub_module --with-http_v2_module --with-mail --with-mail_ssl_module --with-stream --with-stream_realip_module --add-module=/opt/lua-nginx-module-0.10.27 --add-module=/opt/ngx-fancyindex-0.5.2 --add-module=/opt/ngx_devel_kit-0.3.1 --with-http_geoip_module --with-stream_ssl_module --with-stream_ssl_preread_module --add-module=/opt/ngx_http_geoip2_module-3.4 --add-module=/opt/ngx_http_proxy_connect_module-0.0.7 && make && make install

参数说明:

模块名称 简要说明
--with-compat 使编译的 Nginx 二进制文件与动态加载模块兼容。
--with-file-aio 启用文件异步 I/O 支持,提高文件读写性能。
--with-threads 启用多线程支持,提高并发处理能力。
--with-http_addition_module 允许在 HTTP 响应的某些部分添加文本。
--with-http_auth_request_module 允许将子请求的结果用作访问控制的基础。
--with-http_dav_module 启用 WebDAV 方法支持,如 PUT、DELETE 等。
--with-http_flv_module 允许对 FLV 视频文件进行时间戳定位。
--with-http_gunzip_module 解压缩使用 gzip 压缩的响应。
--with-http_gzip_static_module 提供预压缩的 gzip 文件,提高响应速度。
--with-http_v3_module 启用 HTTP/3 协议支持。
--with-cc=c++ 指定使用 C++ 编译器。
--with-http_ssl_module 启用 SSL/TLS 支持,允许 HTTPS 连接。
--with-http_mp4_module 允许对 MP4 视频文件进行时间戳定位。
--with-http_random_index_module 随机选择目录中的文件作为索引文件。
--with-http_realip_module 允许从代理服务器或负载均衡器获取真实客户端 IP 地址。
--with-http_secure_link_module 提供基于 URL 的安全链接功能。
--with-http_slice_module 支持将大文件切片传输,提高大文件传输效率。
--with-http_stub_status_module 提供 Nginx 的运行状态信息。
--with-http_sub_module 允许在 HTTP 响应中进行文本替换。
--with-http_v2_module 启用 HTTP/2 协议支持。
--with-mail 启用邮件代理模块,支持 SMTP/IMAP/POP3 协议。
--with-mail_ssl_module 为邮件代理模块启用 SSL/TLS 支持。
--with-stream 启用流处理模块,支持 TCP/UDP 流量代理。
--with-stream_realip_module 允许从代理服务器或负载均衡器获取真实客户端 IP 地址(用于流处理)。
--with-stream_ssl_module 启用流处理模块的 SSL/TTLS 支持。
--with-stream_ssl_preread_module 允许在 SSL 握手之前读取客户端的协议。
--with-http_geoip_module 允许基于 GeoIP 数据库进行地理位置访问控制。
--add-module=/opt/lua-nginx-module-0.10.27 添加 Lua 支持,使 Nginx 可以运行 Lua 脚本。
--add-module=/opt/ngx-fancyindex-0.5.2 提供美观的目录列表功能。
--add-module=/opt/ngx_devel_kit-0.3.1 提供开发工具包,扩展 Nginx 的功能。
--add-module=/opt/ngx_http_geoip2_module-3.4 允许基于 GeoIP2 数据库进行地理位置访问控制。
--add-module=/opt/ngx_http_proxy_connect_module-0.0.7 允许处理 HTTP CONNECT 方法,用于代理 HTTPS 和其他 TCP 流量。

nginx中的ssl配置增加 quic关键字

复制代码
server {
    listen 80;
    listen 443 ssl;
    listen 443 quic;
    http2 on;
    http3 on;
    http3_hq on;
    quic_retry on;
	ssl_early_data on;
    quic_gso on;
    add_header Alt-Svc 'quic=":443"; h3=":443"; h3-29=":443"; h3-27=":443"; h3-25=":443"; h3-23=":443"; h3-T050=":443"; h3-Q050=":443";h3-Q049=":443";h3-Q048=":443"; h3-Q046=":443"; h3-Q043=":443"';
    }

可以使用https://www.http3check.net 检查网站是否启用http3

问题

1.未找到ssl library

sh 复制代码
checking for getaddrinfo() ... found
checking for PCRE2 library ... not found
checking for PCRE library ... found
checking for PCRE JIT support ... found
checking for OpenSSL library ... not found
checking for OpenSSL library in /usr/local/ ... not found
checking for OpenSSL library in /usr/pkg/ ... not found
checking for OpenSSL library in /opt/local/ ... not found
auto/configure: error: SSL modules require the OpenSSL library.
You can either do not enable the modules, or install the OpenSSL library
into the system, or build the OpenSSL library statically from the source
with nginx by using --with-openssl=<path> option.

解决办法:

需要注意引入动态库时,需要通过增加--with-cc=c++ 且同时在cc-opt 中需要通过-x c 指定为C语言

复制代码
--with-cc=c++ -with-cc-opt="-I/opt/boringssl/include -x c"  --with-ld-opt="-L/opt/boringssl/build/ssl -L/opt/boringssl/build/crypto"

NGINX + BoringSSL build error (NGINX 1.25.4 required Openssl)

也给出了不同系统解决的办法

如果docker中使用nginx 需要注意映射端口放行tcp

附件

涉及到的部分附件 有需要的可以csdn下载

参考文档

nginx官方quic说明

相关推荐
笨鸟先飞的橘猫2 小时前
MMO游戏中的“跨服团队副本”匹配与状态同步系统
分布式·学习·游戏·lua·skynet
程序员老邢6 小时前
【技术底稿 32】Nginx 经典大坑复盘:本机公网域名自环代理,导致接口返回首页 / 404 实战排障
java·运维·nginx·前后端分离·技术底稿·后端部署
Kiyra12 小时前
限流不是加个计数器就行:用 Lua 脚本实现多维度原子限流
开发语言·人工智能·网络协议·职场和发展·架构·lua·ai-native
相思难忘成疾12 小时前
Nginx 子目录多站点配置实验(HTTP/HTTPS 分离部署)
linux·运维·nginx·http·https·vim
閞杺哋笨小孩1 天前
面向「机构按域名访问、同一套前端」的 Nginx 示例
nginx
源远流长jerry1 天前
Linux 本机网络通信机制深度解析:Loopback 设备原理
linux·运维·服务器·网络·tcp/ip·nginx·负载均衡
谙弆悕博士1 天前
Lua学习笔记
c语言·开发语言·笔记·学习·lua·创业创新·业界资讯
spmcor2 天前
一文搞定 Nginx 开机自启:Windows / Linux / macOS 全平台指南
nginx
weixin_408099672 天前
触动精灵调用身份证OCR识别API实现智能信息录入(Lua脚本实战)
junit·ocr·lua·自动化脚本·石榴智能·身份证ocr识别·触动精灵
fred_kang2 天前
Windows 下 Nginx 启动报错 10013 / OpenEvent 完整排查指南
运维·windows·nginx