Linux下编译Nginx集成OpenSSL需手动指定源码路径并配置--with-openssl,确保支持TLS 1.3等特性;先编译安装OpenSSL到自定义路径,再通过configure关联源码或已安装库,最后验证版本与功能。

在Linux下通过源码编译Nginx并集成OpenSSL模块,核心在于确保Nginx能链接到指定版本的OpenSSL(尤其是需要TLS 1.3或国密等高级特性时),而不是依赖系统默认的旧版OpenSSL。这要求你手动指定OpenSSL源码路径,并在configure阶段正确关联。
准备依赖与源码
先安装基础编译工具和依赖库:
- 执行 yum groupinstall "Development Tools"(CentOS/RHEL)或 apt-get install build-essential(Ubuntu/Debian)
- 安装Perl、PCRE、zlib开发包:yum install perl-devel pcre-devel zlib-devel(或对应apt命令)
- 下载OpenSSL源码(如openssl-3.0.12或openssl-1.1.1w),解压到本地目录(如/opt/openssl-src)
- 下载Nginx源码(如nginx-1.24.0),解压到另一目录(如/opt/nginx-src)
编译并安装OpenSSL(可选但推荐)
若需特定功能(如enable-weak-ssl-ciphers、enable-tls1_3、或国密SM2/SM4支持),建议先编译安装OpenSSL到自定义路径:
- 进入OpenSSL源码目录,运行:
./config --prefix=/usr/local/openssl --openssldir=/usr/local/openssl enable-tls1_3 - 执行 make && sudo make install
- 更新动态库路径:
echo '/usr/local/openssl/lib' | sudo tee /etc/ld.so.conf.d/openssl.conf && sudo ldconfig - 验证:/usr/local/openssl/bin/openssl version -a
配置Nginx启用OpenSSL模块
Nginx本身不自带OpenSSL模块,而是通过--with-http_ssl_module启用SSL/TLS支持,并依赖外部OpenSSL库。关键在configure参数:
- 进入Nginx源码目录,运行configure命令,显式指定OpenSSL路径:
./configure \
--prefix=/usr/local/nginx \
--with-http_ssl_module \
--with-openssl=/opt/openssl-src \
--with-openssl-opt=enable-tls1_3 - 注意:--with-openssl 指向的是OpenSSL源码目录(不是安装路径),Nginx会在编译时自动构建内嵌的OpenSSL;若想链接已安装的OpenSSL,则改用 --with-openssl=/usr/local/openssl 并确保pkg-config可用
- 执行 make && sudo make install
验证与常见问题
安装完成后检查是否生效:
- 运行 /usr/local/nginx/sbin/nginx -V 2>&1 | grep -i openssl,确认输出中包含你指定的OpenSSL版本和路径
- 启动Nginx后,用 openssl s_client -connect localhost:443 -tls1_3 测试TLS 1.3是否启用
- 若报错“SSL_CTX_new() failed”或“undefined symbol: SSL_CTX_set_ciphersuites”,通常是OpenSSL版本与Nginx不兼容(如Nginx 1.22+才完全支持OpenSSL 3.x的API),建议匹配官方兼容列表
- 编译报错“no OpenSSL was found”:检查OpenSSL源码目录结构是否完整(含Configure脚本)、权限是否可读、是否遗漏--with-http_ssl_module

















