linux生产环境中源码编译apache应以“最小必要”为原则,禁用所有非核心模块与依赖,仅保留core、so、rewrite三个静态模块,使用内置apr、prefork mpm和pcre-devel,确保二进制<3mb、内存<8mb、无ssl/cgi/代理等功能。

在Linux生产环境中,源码编译Apache的目标不是“功能最多”,而是“最小必要”——去掉所有非核心依赖与运行时开销,保留稳定、安全、可维护的HTTP服务内核。轻量化不等于阉割,而是精准裁剪:禁用动态模块、剥离调试符号、关闭冗余MPM、仅启用必需编译选项。
明确轻量目标与核心约束
轻量化Apache的核心指标是:二进制体积<3MB、内存常驻<8MB、加载模块≤3个(仅core、so、rewrite)、无SSL/CGI/PHP/Proxy等应用层扩展。适用于静态资源分发、反向代理前置节点、容器内嵌Web健康检查端点等场景。
关键约束:
- 不使用系统级apr/apr-util,改用源码自带srclib/apr和srclib/apr-util(避免版本冲突与路径污染)
- 禁用所有
--enable-mods-shared=*,全部模块静态编译或彻底禁用 - 不启用SSL、HTTP/2、Lua、XML、DBD、LDAP等任何加密或外部协议支持
- 仅保留
preforkMPM(最简单、最可控、无线程/事件模型依赖) - 不安装
pcre-devel以外的正则依赖;若完全不需要重写,可进一步禁用--disable-rewrite
精简依赖与环境准备
只需最基础编译链与最小运行时依赖:
- 安装:
yum install -y gcc make pcre-devel(CentOS/RHEL)或apt-get install -y build-essential libpcre3-dev(Debian/Ubuntu) -
不装:
openssl-devel、expat-devel、apr*、zlib-devel、perl——这些都会被主动规避 - 下载官方源码包(如
httpd-2.4.59.tar.gz),解压后进入目录,确认srclib/apr和srclib/apr-util已存在(2.4+默认自带,无需单独编译)
定制configure参数(零冗余核心配置)
执行以下./configure命令(一行输入,无换行):
./configure --prefix=/usr/local/apache-light --enable-static-support --disable-dav --disable-dav-fs --disable-authn-dbm --disable-authn-anon --disable-authn-alias --disable-authz-groupfile --disable-authz-owner --disable-authz-dbm --disable-authz-dbgroup --disable-authz-dbd --disable-cache --disable-disk-cache --disable-mem-cache --disable-file-cache --disable-proxy --disable-proxy-connect --disable-proxy-ftp --disable-proxy-http --disable-proxy-ajp --disable-proxy-balancer --disable-proxy-express --disable-ssl --disable-cgi --disable-cgid --disable-cgid --disable-include --disable-filter --disable-charset-lite --disable-asis --disable-autoindex --disable-reqtimeout --disable-ext-filter --disable-substitute --disable-unique-id --disable-usertrack --disable-headers --disable-setenvif --disable-version --disable-status --disable-info --disable-suexec --with-mpm=prefork --enable-so --enable-rewrite --with-pcre
说明:
-
--enable-static-support:强制所有启用模块静态链接,避免.so文件及LoadModule解析开销 -
--disable-*列表覆盖全部非必需模块(含文档、调试、监控、缓存、代理、认证授权子系统) -
--enable-rewrite保留仅因URL重写在运维中高频刚需;如确定不用,可替换为--disable-rewrite - 不指定
--with-apr或--with-apr-util:自动使用源码内建版本,路径干净无污染
编译、安装与验证
执行三步标准流程:
-
make -j$(nproc) CFLAGS="-O2 -fomit-frame-pointer -DNDEBUG"(启用优化、去调试帧、关闭断言) make install- 清理无用文件:
rm -rf /usr/local/apache-light/{build,icons,error,manual}(删除文档、图标、示例页)
验证轻量成果:
-
/usr/local/apache-light/bin/httpd -V | grep -E "(SERVER_CONFIG_FILE|HTTPD_ROOT)"确认路径正确 -
/usr/local/apache-light/bin/httpd -M | wc -l应输出3(core_module, so_module, rewrite_module) -
ls -sh /usr/local/apache-light/bin/httpd通常为2.1M–2.7M - 启动后执行
ps aux --sort=-vsz | grep httpd | head -3,主进程RSS应稳定在6–8MB
不复杂但容易忽略。











