Nginx(1.13.7)安装依赖缺失导致【make: *** 没有规则可以创建“default”需要的目标“build”】问题排查与修复
1. 问题背景与现象分析最近在Linux系统上手动编译安装Nginx 1.13.7版本时遇到了一个典型的编译错误make: *** 没有规则可以创建default需要的目标build。这个错误让很多初次接触Nginx编译安装的朋友感到困惑我也是在踩了这个坑之后才真正理解了背后的原因。这个错误通常发生在执行make命令阶段表面上看是Makefile规则缺失实际上90%的情况都是因为系统缺少必要的编译依赖。Nginx作为高性能Web服务器其编译过程需要依赖多个基础库包括PCRE正则表达式支持、zlib压缩功能、OpenSSL加密通信等。如果这些依赖没有正确安装就会导致configure阶段生成的Makefile不完整进而引发这个错误。我最初遇到这个问题时也很纳闷——明明已经按照官方文档操作了为什么还会报错后来发现很多Linux发行版的默认安装并不包含完整的开发工具链和库文件。特别是在最小化安装的系统上这种情况更为常见。下面我就详细说说这个问题的排查思路和具体解决方法。2. 系统环境准备2.1 检查基础开发工具在开始Nginx编译之前首先要确保系统已经安装了基本的开发工具链。不同的Linux发行版安装方式略有差异对于基于RHEL/CentOS的系统sudo yum groupinstall Development Tools对于Debian/Ubuntu系统sudo apt-get install build-essential这个步骤会安装gcc、make、autoconf等基础编译工具。安装完成后建议验证一下gcc是否可用gcc --version2.2 确认系统架构虽然不常见但有时候这个错误也可能是由于系统架构不匹配导致的。特别是当你在64位系统上尝试编译32位软件时。可以用以下命令检查uname -m如果显示x86_64说明是64位系统如果是i386或i686则是32位系统。Nginx 1.13.7支持这两种架构但要确保你下载的源码包与系统架构匹配。3. 依赖库的完整安装3.1 必须的依赖库清单Nginx编译需要以下几个核心依赖库缺一不可PCRE处理正则表达式zlib提供gzip压缩功能OpenSSL支持HTTPS协议GCCC语言编译器对于RHEL/CentOS系统可以用这个命令一次性安装所有依赖sudo yum install -y gcc openssl openssl-devel pcre-devel zlib zlib-devel对于Debian/Ubuntu系统对应的命令是sudo apt-get install -y libpcre3 libpcre3-dev zlib1g zlib1g-dev libssl-dev3.2 依赖库版本检查有时候即使安装了这些库版本不匹配也会导致问题。建议检查关键库的版本openssl version pcre-config --versionNginx 1.13.7对这些库的最低版本要求是OpenSSL 1.0.1PCRE 8.20zlib 1.1.3如果你的系统仓库中的版本过低可能需要手动编译安装新版本。4. 完整的Nginx编译安装流程4.1 源码准备与解压首先下载Nginx 1.13.7的源码包wget http://nginx.org/download/nginx-1.13.7.tar.gz tar -zxvf nginx-1.13.7.tar.gz cd nginx-1.13.74.2 配置编译选项运行configure脚本时建议至少包含以下模块./configure --with-http_stub_status_module --with-http_ssl_module如果一切正常你会看到类似这样的输出Configuration summary using system PCRE library using system OpenSSL library using system zlib library如果这里报错通常会明确指出缺少哪个依赖根据提示安装对应库即可。4.3 编译与安装配置成功后就可以开始编译了make sudo make install如果之前出现过没有规则可以创建default需要的目标build错误在正确安装所有依赖后这一步应该能顺利完成。5. 常见问题排查5.1 错误信息深度解析当出现没有规则可以创建default需要的目标build时不要只看最后一行错误。建议先检查config.log文件less objs/config.log这个文件会记录configure过程中的详细检查结果通常能发现具体是哪个依赖检查失败了。5.2 清理与重试如果之前尝试过编译失败建议先清理再重试make clean ./configure ... make有时候旧的编译残留会导致奇怪的问题清理后重新开始往往能解决。5.3 检查磁盘空间虽然不常见但磁盘空间不足也可能导致类似错误df -h确保/tmp和当前目录有足够的空间至少100MB可用。6. 安装后的配置与验证6.1 防火墙设置Nginx默认监听80端口需要确保防火墙允许sudo firewall-cmd --permanent --add-servicehttp sudo firewall-cmd --reload6.2 启动与测试Nginx默认安装到/usr/local/nginx目录启动命令是sudo /usr/local/nginx/sbin/nginx验证服务是否正常运行curl -I http://localhost应该能看到类似这样的响应HTTP/1.1 200 OK Server: nginx/1.13.77. 经验分享与建议在实际运维环境中我遇到过几次这个错误总结出几个关键点首先是一定要在编译前检查所有依赖特别是新装系统其次configure阶段的输出信息非常重要要仔细阅读最后config.log文件是排查问题的金钥匙。对于生产环境建议使用更高版本的Nginx如1.20因为1.13.7已经停止维护。如果必须使用这个版本至少要确保所有安全补丁都已应用。另外可以考虑使用包管理器安装预编译版本能避免很多编译时的问题。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2435126.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!