编译Nginx源码时--with-http_ssl_module模块未成功构建,请求技术排查
--with-http_ssl_module模块的问题 看起来你已经走完了Nginx重新编译的流程,但SSL模块依然没成功集成,导致Certbot报错。我来帮你排查几个关键问题点,一步步解决这个麻烦:
1. 先确认编译依赖是否完整
你已经安装了libssl运行时库,但编译Nginx的SSL模块需要带头文件的开发版SSL库——运行时库只负责程序运行,编译时得靠开发包提供头文件才能把SSL模块编进去:
- Debian/Ubuntu系统,执行:
sudo apt-get update && sudo apt-get install libssl-dev - CentOS/RHEL系统,执行:
sudo yum install openssl-devel
2. 彻底清理编译残留,重新配置
有时候make clean可能没完全清理干净之前的编译缓存,建议再加一步清理配置残留:
# 先切换到你的Nginx源码目录 cd /path/to/nginx-source-folder # 彻底清理所有编译生成的文件 sudo make clean sudo rm -rf objs/ # 重新执行你的configure命令(参数保持你原来的即可) sudo ./auto/configure --prefix=/var/www/html --sbin-path=/usr/sbin/nginx --conf-path=/etc/nginx/nginx.conf --http-log-path=/var/log/nginx/access.log --error-log-path=/var/log/nginx/error.log --with-pcre --with-http_ssl_module --lock-path=/var/lock/nginx.lock --pid-path=/var/run/nginx.pid --modules-path=/etc/nginx/modules
执行configure后一定要看输出日志,确认有没有出现这条内容:
adding module http_ssl_module
如果没看到,说明configure过程没识别到SSL开发库,得回头检查依赖是不是装对了。
3. 验证编译后的Nginx是否真的带SSL模块
编译安装完别着急重启,先确认当前用的Nginx是不是你刚编译的版本:
# 查看系统默认的Nginx路径 which nginx # 查看这个二进制文件的编译参数(注意是大写V) /usr/sbin/nginx -V
在输出的configure arguments里,必须能看到--with-http_ssl_module。如果没有,说明make install没覆盖掉原来的Nginx(比如原来的是系统包管理器装的,路径可能不一样),这时候手动替换:
# 先停掉Nginx服务 sudo systemctl stop nginx # 备份原二进制文件,以防出错 sudo cp /usr/sbin/nginx /usr/sbin/nginx.bak # 把编译好的新二进制复制到系统路径 sudo cp objs/nginx /usr/sbin/nginx # 再验证一次参数 /usr/sbin/nginx -V
4. 重新测试Certbot
确认SSL模块已经集成后,重启Nginx再跑Certbot命令:
sudo systemctl restart nginx sudo certbot --nginx -d feedme.pub
补充你的环境信息参考
你遇到的Certbot错误:
Saving debug log to /var/log/letsencrypt/letsencrypt.log
The nginx plugin is not working; there may be problems with your existing configuration.
The error was: PluginError('Nginx build is missing SSL module (--with-http_ssl_module).')
以及已安装的libssl库输出:
ldconfig -p | grep libssl
libssl3.so (libc6,x86-64) => /usr/lib/x86_64-linux-gnu/libssl3.so
libssl.so.1.1 (libc6,x86-64) => /usr/lib/x86_64-linux-gnu/libssl.so.1.1
libssl.so.1.0.0 (libc6,x86-64) => /usr/lib/x86_64-linux-gnu/libssl.so.1.0.0
libssl.so (libc6,x86-64) => /usr/lib/x86_64-linux-gnu/libssl.so
这说明运行时库没问题,大概率是编译时缺了开发版头文件,先按第一步装依赖再重新编译应该就能解决。
内容的提问来源于stack exchange,提问作者Jia

