侧边栏壁纸
博主头像
いちごみるく

行动起来,活在当下

  • 累计撰写 70 篇文章
  • 累计创建 48 个标签
  • 累计收到 55 条评论

目 录CONTENT

文章目录

宝塔 Nginx 自定义编译模块:2023 年操作记录与当前核对方法

历史编译记录。 本文以 2023 年宝塔面板与 Nginx 1.22 为背景,说明构建参数和动态模块兼容性。当前面板的脚本入口、参数与模块打包方式需要按版本核对。

当时为了使用 Nginx 的 stream realip 功能,我修改了宝塔安装脚本的 ./configure 参数后重新编译。思路仍有参考价值,但不能把当年的面板脚本和版本号直接当作今天的安装命令。

安装脚本应从面板对应版本的官方渠道获取。先保留现有 nginx.sh,再检查下载来源、脚本内容与版本兼容性;不要先删除本地文件,再执行未经验证的下载内容。

先确认正在运行哪个 Nginx

面板环境可能与系统包同时安装 Nginx。先查看 master process 与实际二进制,使用那个二进制的 -V 检查 configure 参数,不能仅凭 shell 中的 nginx 判断面板实例。

ps -eo pid,args | grep '[n]ginx: master'
# 将下面路径换成正在运行的二进制;这是我使用过的宝塔路径。
/www/server/nginx/sbin/nginx -V 2>&1

读取 master PID 的 /proc/PID/exe 也能确认执行文件。我的家庭基础设施记录使用 /www/server/nginx/sbin/nginx;在另一套系统 Nginx 上执行 -t,不能证明面板配置通过。

模块功能与编译方式

官方 configure 参数 区分几个容易混淆的模块:

参数 用途
--with-stream 或 --with-stream=dynamic TCP/UDP stream 代理框架
--with-stream_ssl_preread_module 在不终止 TLS 的情况下读取 ClientHello SNI/ALPN
--with-stream_realip_module stream 层接收可信 PROXY 来源地址
--with-http_realip_module HTTP 层还原可信代理提供的来源地址

如果模块已编译为动态模块,还要检查 load_module 和对应 .so 是否加载。缺少某项时,不要只在旧脚本里追加一个参数就替换整个运行实例:保留当前版本、完整 configure 参数、补丁、库依赖与模块 ABI,是能够回滚的前提。

2023 年修改 configure 参数的截图

自编译和系统包的路径、模块兼容性、OpenSSL 链接方式可能不同。动态模块应按匹配的 Nginx 版本与构建选项编译,必要时使用 --with-compat;这也不能保证任意第三方模块跨版本兼容。面板更新还可能覆盖自定义构建,实际维护方案必须说明后续升级方式。

变更后验证

在隔离环境完成构建与模块加载检查,再使用实际二进制和实际配置进行 -t。通过后才替换/重载服务,并验证依赖该模块的功能:例如 stream SNI 分流、PROXY 前缀收发和可信来源地址。

/www/server/nginx/sbin/nginx -t
/www/server/nginx/sbin/nginx -V 2>&1

这里没有执行新的面板安装或重编译,也没有验证当前宝塔脚本的 install 参数。旧的 install 1.22 仅属于当年操作记录;已有 Nginx 实例应按当前支持版本维护。

2023 年 nginx -V 输出截图,仅证明当年构建

0

评论区