一聚教程网:一个值得你收藏的教程网站

热门教程

Nginx 源码安装如何静态编译依赖库到二进制

时间:2026-08-18 11:12:49 编辑:袖梨 来源:一聚教程网

静态编译Nginx需将PCRE、zlib、OpenSSL等依赖以静态库(.a)形式编译安装,并在configure中用--with-pcre=、--with-zlib=、--with-openssl=指定路径,同时必须添加--with-cc-opt="-static"和--with-ld-opt="-static"强制全静态链接,最终用ldd验证是否为not a dynamic executable。

静态编译 Nginx 是指将所有依赖库(如 PCRE、zlib、OpenSSL)直接链接进最终的 nginx 二进制文件,不依赖系统动态库。这样生成的二进制可移植性强,部署时无需额外安装运行时依赖。

明确静态链接的前提条件

静态编译不是简单加个参数就能完成,它要求所有依赖库本身也必须是静态版本(.a 文件),且头文件完整。系统默认的 *-devel 包通常只提供动态库(.so)和开发头文件,不附带静态库(.a)。所以需手动编译这些依赖的静态版本。

  1. 确认目标系统已安装基础编译工具:gccmakeperl
  2. 禁用系统自带的动态依赖包(如 openssl-develpcre-devel),避免 configure 混淆路径
  3. 所有依赖源码需启用 --enable-static 或类似选项构建静态库

逐个编译静态依赖库

以主流三依赖为例(PCRE、zlib、OpenSSL),全部需从源码编译并指定静态输出:

  1. PCRE:下载 pcre-8.45+,解压后执行

    ./configure --enable-static --disable-shared --prefix=/opt/pcre-static

    make && make install

  2. zlib:下载 zlib-1.2.13+,进入目录后直接 make && make install PREFIX=/opt/zlib-static(zlib 默认只生成静态库)
  3. OpenSSL:下载 openssl-3.0.13+,配置时加 no-shared--static

    ./config no-shared --static --prefix=/opt/openssl-static

    然后 make && make install

配置 Nginx 启用静态链接

进入 Nginx 源码目录后,使用 --with-xxx=PATH 显式指向各静态依赖的安装路径,并强制关闭动态链接:

  1. 关键 configure 参数示例:

    ./configure

    --prefix=/usr/local/nginx

    --with-pcre=/opt/pcre-static

    --with-zlib=/opt/zlib-static

    --with-openssl=/opt/openssl-static

    --with-http_ssl_module

    --with-http_gzip_static_module

    --without-http_scgi_module

    --without-http_uwsgi_module

    --with-cc-opt="-static"

    --with-ld-opt="-static"

  2. --with-cc-opt="-static"--with-ld-opt="-static" 是核心,告诉编译器全程静态链接
  3. 执行 ./configure 后检查输出中是否出现 checking for PCRE library ... found 等提示,且末尾无 warning 提及“shared library”

验证生成的二进制是否真正静态

编译安装完成后,用 ldd 检查 nginx 主程序是否完全脱离动态依赖:

  1. ldd /usr/local/nginx/sbin/nginx
  2. 若输出为 not a dynamic executable 或仅显示 linux-vdso.so.1(内核提供的 VDSO,非用户态依赖),说明静态编译成功
  3. 若仍列出 libpcre.solibssl.so 等,则说明某一步未生效,需回溯依赖路径或 configure 日志

热门栏目