编译支持国密的Nginx(如集成GmSSL或Tongsuo)时,遇到的依赖问题主要分为基础编译工具缺失、国密库依赖和Nginx自身模块依赖三类。

下面汇总了常见的依赖包缺失问题及解决方案,供用户参考。

一、常见依赖包缺失问题与解决

依赖包/库      缺失时的典型错误      解决方法  (以CentOS/RHEL为例)  

基础编译工具链          `gcc:  command  not  found`,  `make:  command  not  found`      `yum  groupinstall  "Development  Tools"  -y`  

PCRE库          `the  HTTP  rewrite  module  requires  the  PCRE  library`      `yum  install  pcre  pcre-devel  -y`  

Zlib库          `the  HTTP  gzip  module  requires  the  zlib  library`      `yum  install  zlib  zlib-devel  -y`  

OpenSSL/GmSSL开发库          国密算法无法识别、`openssl`相关头文件未找到          不建议使用系统自带的`openssl-devel`。需手动下载并编译GmSSL或Tongsuo,然后在Nginx编译时通过`--with-openssl=`指定其源码路径。  

Perl          `Can't  locate  IPC/Cmd.pm`  等错误      `yum  install  perl-IPC-Cmd  -y`  

其他常用工具            `wget:  command  not  found`,  `unzip:  command  not  found`      `yum  install  wget  unzip  vim  lrzsz  tree  screen  psmisc  lsof  tcpdump  ntpdate  -y`  

二、编译时的关键配置参数

除了安装依赖包,正确的编译配置也至关重要。以下是一些关键点:

      指定国密库路径:在Nginx的`./configure`阶段,必须通过参数指定国密库(如GmSSL)的源代码或安装路径。例如:

        bash

        ./configure  --with-openssl=/path/to/gmssl-source  ...

      启用SSL模块:需要显式添加`--with-http_ssl_module`参数来启用Nginx的SSL功能。

      处理PCRE缺失:如果PCRE库安装有问题,可以临时添加`--without-http_rewrite_module`参数跳过依赖,但这会使Nginx失去URL重写功能。

三、验证与调试

编译安装后,建议进行以下验证:

1.    检查Nginx编译信息:运行`nginx  -V`,确认输出中`--with-openssl=`指向的是你编译的国密库路径,且`openssl  version`字段包含“gmssl”等字样。

2.    检查库文件路径:确认系统动态链接器能找到国密库文件(如`libcrypto.so`、`libssl.so`)。

3.    检查证书文件格式:确保证书和密钥文件是Unix(LF)换行符格式。如果是在Windows环境下编辑过,可使用`dos2unix`工具进行转换。

4.    检查Nginx服务配置:确保系统服务文件(如`/usr/lib/systemd/system/nginx.service`)中的`ExecStart`路径指向你新编译的Nginx二进制文件。

总结

编译国密Nginx的关键在于彻底替换系统的OpenSSL,转而使用GmSSL或Tongsuo等国密库,并确保所有编译依赖都已正确安装。

另外,除了GmSSL,由阿里等大厂维护的**Tongsuo**(原BabaSSL)也是一个活跃且兼容性好的选择,可以作为国密库的备选。如果在编译过程中遇到其他具体的错误信息,可以提供详细的报错日志,以便进一步分析。