当前位置: 首页 > news >正文

Nginx 1.13.7安装踩坑实录:如何解决‘make: *** 没有规则可以创建default需要的目标build‘错误

Nginx编译安装实战指南:从依赖缺失到服务部署的全流程解析

在Linux环境下手动编译安装Nginx是开发者必须掌握的基础技能之一,但这个过程往往伴随着各种依赖问题和配置挑战。最近在为某企业级应用搭建Web服务器时,我选择了Nginx 1.13.7版本进行源码编译安装,却在执行make命令时遭遇了经典的make: *** 没有规则可以创建default需要的目标build错误。这个看似简单的错误信息背后,实际上隐藏着编译环境配置、依赖管理、Makefile机制等多个技术层面的问题。

本文将基于Anolis OS(龙蜥操作系统)环境,详细拆解Nginx编译安装的全过程,不仅解决这个特定错误,更会系统性地梳理编译安装Web服务器的完整知识体系。无论你是刚接触Linux服务部署的新手,还是需要排查复杂环境的老手,都能从中获得可立即落地的实用方案。

1. 编译环境准备:构建稳健的基础设施

在开始Nginx编译之前,确保编译环境的完整性是避免后续问题的关键第一步。Anolis OS作为RHEL/CentOS系的衍生发行版,使用yum作为包管理工具,我们需要通过它来安装必要的开发工具链。

基础开发工具组安装

sudo yum groupinstall 'Development Tools' -y

这个命令会安装包括gcc、make、autoconf等在内的完整开发工具链,它们是编译任何开源软件的基础。安装完成后,建议验证gcc的可用性:

gcc --version # 期望输出类似:gcc (GCC) 8.5.0

但仅仅安装开发工具组还不够,Nginx有自己特定的依赖要求。以下是Nginx编译所需的专项依赖库:

依赖库作用安装命令
pcre-devel正则表达式支持sudo yum install pcre-devel -y
zlib-devel压缩功能支持sudo yum install zlib-devel -y
openssl-develHTTPS支持sudo yum install openssl-devel -y

在实际操作中,我推荐使用组合命令一次性安装所有必需依赖:

sudo yum install -y gcc make pcre-devel zlib-devel openssl-devel

注意:生产环境中建议指定软件包版本以避免兼容性问题,例如openssl-devel-1.1.1k

2. 源码配置阶段:解密configure的幕后工作

获取Nginx源码通常有两种方式:从官网下载稳定版本,或从Git仓库克隆最新开发版。对于生产环境,我们选择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.7

进入源码目录后,./configure脚本是编译前的关键步骤。这个shell脚本主要执行以下工作:

  1. 检查系统环境是否符合编译要求
  2. 检测依赖库的可用性及路径
  3. 根据参数生成适配当前系统的Makefile
  4. 确定Nginx的模块组成和安装路径

一个典型的带模块的配置命令如下:

./configure \ --with-http_stub_status_module \ --with-http_ssl_module \ --prefix=/usr/local/nginx-custom

这里有几个实用参数值得关注:

  • --prefix:指定安装路径,避免污染系统默认目录
  • --with-http_ssl_module:启用HTTPS支持
  • --with-http_stub_status_module:启用状态监控接口

常见配置问题排查表

错误现象可能原因解决方案
"./configure: error: C compiler cc is not found"gcc未安装安装gcc套件
"the HTTP rewrite module requires the PCRE library"pcre-devel缺失安装pcre-devel
"the HTTP gzip module requires zlib library"zlib-devel缺失安装zlib-devel

配置成功后,终端会输出汇总信息,包括安装路径、启用模块等重要配置。务必检查这些信息是否符合预期。

3. 编译与安装:深入Makefile机制

当configure阶段顺利完成后,目录下会生成适配当前环境的Makefile文件。此时执行make命令,系统会:

  1. 解析Makefile中的构建规则
  2. 根据规则编译各个模块的源代码
  3. 生成中间对象文件(.o)和最终二进制文件

典型的编译安装命令序列:

make sudo make install

在遇到没有规则可以创建default需要的目标build错误时,本质上是因为Makefile中缺少build目标的定义规则。这种情况通常源于:

  1. configure执行不完整,未能正确生成Makefile
  2. 关键依赖缺失导致Makefile生成异常
  3. 源码包损坏或不完整

系统化解决方案

  1. 彻底清理之前的配置缓存:
make distclean
  1. 重新运行configure并检查输出:
./configure --with-http_ssl_module
  1. 检查生成的Makefile是否包含build规则:
grep "build:" Makefile
  1. 完整编译安装流程:
make -j$(nproc) sudo make install

提示:使用-j$(nproc)参数可以并行编译,大幅加快编译速度

4. 安装后配置:安全与优化实践

Nginx安装完成后,位于/usr/local/nginx目录(或configure指定的路径)。接下来需要进行一系列生产级配置:

目录结构说明

/usr/local/nginx/ ├── sbin/ # 主程序目录 │ └── nginx # 可执行文件 ├── conf/ # 配置文件目录 │ ├── nginx.conf # 主配置文件 │ └── ... ├── logs/ # 日志目录 └── html/ # 默认网站根目录

防火墙配置(针对Anolis OS的firewalld):

sudo firewall-cmd --permanent --zone=public --add-service=http sudo firewall-cmd --permanent --zone=public --add-service=https sudo firewall-cmd --reload

系统服务化配置(创建systemd单元文件):

sudo tee /etc/systemd/system/nginx.service <<-'EOF' [Unit] Description=The nginx HTTP and reverse proxy server After=network.target [Service] Type=forking PIDFile=/usr/local/nginx/logs/nginx.pid ExecStartPre=/usr/local/nginx/sbin/nginx -t ExecStart=/usr/local/nginx/sbin/nginx ExecReload=/usr/local/nginx/sbin/nginx -s reload ExecStop=/usr/local/nginx/sbin/nginx -s quit PrivateTmp=true [Install] WantedBy=multi-user.target EOF

启用并启动服务:

sudo systemctl enable nginx sudo systemctl start nginx

安全加固建议

  1. 修改默认的worker进程运行用户:
user nginx;
  1. 禁用server_tokens避免版本信息泄露:
server_tokens off;
  1. 限制HTTP方法只允许必要的方法:
limit_except GET POST { deny all; }

5. 高级调试技巧:当问题依然存在时

即使按照上述步骤操作,在某些特殊环境下可能仍会遇到问题。以下是几个高级调试方法:

方法一:详细日志分析

在configure时启用调试模式:

./configure --with-debug make

然后运行nginx时获取详细日志:

/usr/local/nginx/sbin/nginx -g "error_log stderr debug;"

方法二:静态链接关键库

对于依赖库路径复杂的环境,可以考虑静态编译:

./configure \ --with-http_ssl_module \ --with-pcre=../pcre-8.45 \ --with-zlib=../zlib-1.2.11 \ --with-openssl=../openssl-1.1.1l

方法三:使用strace追踪系统调用

当nginx启动失败时:

strace -f /usr/local/nginx/sbin/nginx

这个方法可以显示所有系统调用,帮助定位文件缺失或权限问题。

常见问题速查表

现象诊断命令可能解决方案
端口占用ss -tulnp | grep :80停止占用进程或修改nginx端口
权限拒绝namei -l /usr/local/nginx/logs/调整目录权限或SELinux设置
模块缺失nginx -V 2>&1 | grep module重新编译包含所需模块

在完成所有配置后,建议使用自动化测试工具验证Nginx的安装质量:

# 基础响应测试 curl -I http://localhost # SSL测试(如果配置了HTTPS) openssl s_client -connect localhost:443 -servername localhost
http://www.jsqmd.com/news/520994/

相关文章:

  • 航拍滑坡数据集4315张VOC+YOLO格式
  • 【Gemini】根据CAD截图进行工业美学与CMF设计
  • Turbo Intruder:如何在Burp Suite中实现百万级请求攻击?
  • 3步解锁Nuke效率革命:200+专业插件全流程解决方案
  • 零基础玩转yz-bijini-cosplay:LoRA动态切换,小白也能轻松创作多风格Cosplay美图
  • Youtu-VL-4B-Instruct效果展示:中英文混排菜单图OCR+菜品推荐文案生成
  • 如何通过GHelper实现华硕ROG笔记本的极致性能调校?
  • Unity UI布局避坑指南:为什么Content Size Fitter不能嵌套使用?
  • LingBot-Depth效果展示:RGB图像生成毫米级精度深度图实测集
  • φ5000mm称重仓总图
  • Qwen-Image-2512-Pixel-Art-LoRA 在游戏开发中的应用:快速生成2D独立游戏素材与精灵图
  • WeKnora知识图谱构建指南:从文档到关联知识网络
  • 个人开发者支付集成解决方案:3个步骤搞定全场景收款功能
  • Transformer基础架构详解(附图 + Python Demo)
  • driftnet使用教程
  • Nomic-Embed-Text-V2-MoE与操作系统:重装系统后快速恢复AI开发环境的完整流程
  • Qwen3-0.6B-FP8内网穿透部署方案:安全访问本地AI模型服务
  • CREST 分子构象采样工具:从理论到实践的全面指南
  • Pixel Dimension Fissioner 数据库课程设计辅助:从ER图到SQL语句全流程生成
  • HPatches数据集:计算机视觉特征匹配的终极指南
  • SuperStart开始菜单工具v2.1.1
  • 【PolarCTF】Don‘t touch me
  • 构建智能搜索引擎:文脉定序系统核心排序模块集成实战
  • 避开这些坑!uni-app导航栏开发中的5个高频错误(含微信小程序胶囊按钮适配技巧)
  • 保姆级教程:在SAP里创建一个能直接下载文件的HTTP接口(SICF配置避坑指南)
  • FastSurfer终极指南:如何在5分钟内完成深度学习大脑MRI分割?
  • NukeSurvivalToolkit:200+专业特效工具集如何重塑Nuke工作流
  • 通义千问1.8B模型入门:从部署到自动生成API文档全流程
  • 每日算法练习:LeetCode 134. 加油站 ✅
  • 避坑指南:Matlab计算THD时容易忽略的6个细节(附采样率设置建议)