源码编译能让你用上官方最新版,但会失去 apt 自动更新支持,适合需要特定模块或版本功能的场景。
先说结论:除非你有明确的版本依赖或模块需求,否则生产环境建议优先使用 apt 源安装,源码编译更适合开发测试或特定定制场景。
- 适合:需要最新特性、官方未打包模块或特定编译参数的场景
- 先准备:清理旧版本冲突、安装编译依赖、确认系统库版本
- 验收:验证服务状态、检查版本信息、确认端口监听正常
环境准备
1. 清理潜在冲突
如果之前通过 apt 安装过 apache2,建议先停止服务。若需彻底清理,请确认无其他业务依赖该包。
sudo systemctl stop apache2
sudo systemctl disable apache2
# 谨慎执行卸载,避免误删依赖
sudo apt remove apache2 apache2-bin apache2-data2. 安装编译依赖
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.582. 配置编译选项
注意参数前不要加反引号,否则会导致 shell 解析错误。`--enable-mods-shared`=most 将常用模块编译为动态加载。
./configure `--prefix`=/usr/local/apache2 `--enable-so` `--enable-ssl` `--enable-mods-shared`=most3. 编译与安装
make 过程可能耗时几分钟。若 configure 报错,请查看当前目录下的 config.log 定位缺失库。
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-custom2. 配置防火墙(重要)
若启用了 ufw,需放行 HTTP/HTTPS 端口,否则外部无法访问。
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp验证与排查
1. 检查版本
确认运行的是刚编译的版本,而非系统旧版。
/usr/local/apache2/bin/httpd -v2. 检查服务状态
查看 systemd 状态是否 active (running)。
systemctl status apache2-custom3. 检查端口监听
确认 80 端口已被 httpd 进程占用。
sudo ss -tlnp | grep :804. 页面访问
本地 curl 测试或浏览器访问服务器 IP,应看到 "It works!" 默认页。
curl http://localhost5. 编译失败排查
若 configure 阶段报错,不要盲目重试。查看源码目录下的 config.log 文件,搜索 "error" 关键字,通常能发现缺失的开发包或库路径问题。
风险提示
1. 安全更新滞后
源码安装不会随 apt upgrade 更新,需定期查看 Apache 官方安全公告,手动下载新版本重新编译替换,否则存在漏洞风险。
2. 配置文件路径差异
源码默认配置在 /usr/local/apache2/conf/,与 Ubuntu 习惯的 /etc/apache2/ 不同,修改配置时不要找错位置。
3. 端口冲突
如果未彻底清理 apt 安装的 apache2,源码编译的服务可能无法绑定 80 端口,启动报错 "Address already in use"。