如何在 Ubuntu 20.04 上源码编译安装最新稳定版 Apache

文章导读
源码编译能让你用上官方最新版,但会失去 apt 自动更新支持,适合需要特定模块或版本功能的场景。
📋 目录
  1. 环境准备
  2. 下载与编译
  3. 服务管理与防火墙
  4. 验证与排查
  5. 风险提示
A A

源码编译能让你用上官方最新版,但会失去 apt 自动更新支持,适合需要特定模块或版本功能的场景。

先说结论:除非你有明确的版本依赖或模块需求,否则生产环境建议优先使用 apt 源安装,源码编译更适合开发测试或特定定制场景。

  • 适合:需要最新特性、官方未打包模块或特定编译参数的场景
  • 先准备:清理旧版本冲突、安装编译依赖、确认系统库版本
  • 验收:验证服务状态、检查版本信息、确认端口监听正常

环境准备

1. 清理潜在冲突
如果之前通过 apt 安装过 apache2,建议先停止服务。若需彻底清理,请确认无其他业务依赖该包。

sudo systemctl stop apache2
sudo systemctl disable apache2
# 谨慎执行卸载,避免误删依赖
sudo apt remove apache2 apache2-bin apache2-data

2. 安装编译依赖
Apache 编译需要 APR、APR-Util 和 PCRE 库。Ubuntu 20.04 默认支持 libpcre3,若编译报错可尝试 libpcre2。

sudo apt update
sudo apt install build-essential libapr1-dev libaprutil1-dev libpcre3-dev libssl-dev zlib1g-dev

下载与编译

1. 获取源码
访问 Apache 官方下载页获取最新稳定版 tar 包,不要使用第三方镜像。以下命令以 2.4.58 为例,请替换为实际最新版本。

cd /usr/local/src
wget https://dlcdn.apache.org/httpd/httpd-2.4.58.tar.gz
tar -xzf httpd-2.4.58.tar.gz
cd httpd-2.4.58

2. 配置编译选项
注意参数前不要加反引号,否则会导致 shell 解析错误。`--enable-mods-shared`=most 将常用模块编译为动态加载。

./configure `--prefix`=/usr/local/apache2 `--enable-so` `--enable-ssl` `--enable-mods-shared`=most

3. 编译与安装
make 过程可能耗时几分钟。若 configure 报错,请查看当前目录下的 config.log 定位缺失库。

如何在 Ubuntu 20.04 上源码编译安装最新稳定版 Apache
make
sudo make install

服务管理与防火墙

1. 配置 systemd 托管
源码安装默认没有 systemd 服务文件,手动创建以便使用 systemctl 管理。

sudo nano /etc/systemd/system/apache2-custom.service

填入以下内容(注意路径与实际安装一致):

[Unit]
Description=The Apache HTTP Server
After=network.target

[Service]
Type=forking
ExecStart=/usr/local/apache2/bin/apachectl start
ExecStop=/usr/local/apache2/bin/apachectl stop
ExecReload=/usr/local/apache2/bin/apachectl graceful
PIDFile=/usr/local/apache2/logs/httpd.pid

[Install]
WantedBy=multi-user.target

重载配置并启用:

sudo systemctl daemon-reload
sudo systemctl enable apache2-custom
sudo systemctl start apache2-custom

2. 配置防火墙(重要)
若启用了 ufw,需放行 HTTP/HTTPS 端口,否则外部无法访问。

sudo ufw allow 80/tcp
sudo ufw allow 443/tcp

验证与排查

1. 检查版本
确认运行的是刚编译的版本,而非系统旧版。

/usr/local/apache2/bin/httpd -v

2. 检查服务状态
查看 systemd 状态是否 active (running)。

如何在 Ubuntu 20.04 上源码编译安装最新稳定版 Apache
systemctl status apache2-custom

3. 检查端口监听
确认 80 端口已被 httpd 进程占用。

sudo ss -tlnp | grep :80

4. 页面访问
本地 curl 测试或浏览器访问服务器 IP,应看到 "It works!" 默认页。

curl http://localhost

5. 编译失败排查
若 configure 阶段报错,不要盲目重试。查看源码目录下的 config.log 文件,搜索 "error" 关键字,通常能发现缺失的开发包或库路径问题。

风险提示

1. 安全更新滞后
源码安装不会随 apt upgrade 更新,需定期查看 Apache 官方安全公告,手动下载新版本重新编译替换,否则存在漏洞风险。

2. 配置文件路径差异
源码默认配置在 /usr/local/apache2/conf/,与 Ubuntu 习惯的 /etc/apache2/ 不同,修改配置时不要找错位置。

3. 端口冲突
如果未彻底清理 apt 安装的 apache2,源码编译的服务可能无法绑定 80 端口,启动报错 "Address already in use"。