精简Nginx源码编译模块的核心是用--without-xxx显式禁用默认启用但业务不用的模块;需先执行nginx -V确认当前模块基准,再分层禁用HTTP、MAIL、STREAM等非必要模块,并同步清理配置中相关指令。

精简 Nginx 源码编译模块的核心,是主动用 --without-xxx 显式禁用默认启用但业务不用的模块,而不是指望“不加就等于不编译”——因为多数 HTTP 模块(如 http_auth_basic、http_autoindex、http_proxy)在标准 configure 中是默认开启的。
先确认当前模块 baseline
执行 nginx -V(大写 V),查看输出末尾的 configure arguments。它会完整列出已启用/禁用的模块选项,是你后续精简的起点。跳过这步容易误删依赖或重复操作。
分层禁用非必要模块
按功能归类剔除,优先从最常冗余的部分入手:
-
静态服务场景(仅托管 HTML/CSS/JS):可安全去掉
--without-http_autoindex_module、--without-http_ssi_module、--without-http_rewrite_module、--without-http_geo_module、--without-http_map_module -
无后端代理需求:禁用
--without-http_proxy_module、--without-http_fastcgi_module(注意:PHP 场景必须保留)、--without-http_uwsgi_module、--without-http_scgi_module -
彻底关闭整类功能:加
--without-mail(屏蔽 POP3/IMAP/SMTP 全部邮件模块)、--without-stream(关闭 TCP/UDP 四层转发) -
调试与兼容模块:
--without-debug可减小约 15% 二进制体积;--without-poll_module和--without-select_module在现代 Linux(epoll 默认)下可移除
编译与验证要点
configure 命令需一次性写全所有 --without- 参数,避免 shell 折行导致遗漏。例如:
./configure --prefix=/usr/local/nginx-min --with-http_ssl_module --with-http_v2_module --without-http_autoindex_module --without-http_proxy_module --without-mail --without-stream --with-cc-opt='-O2'
编译完成后(make,暂不 make install):
- 运行
./objs/nginx -V,确认目标模块已出现在禁用列表中 - 对比新旧二进制大小:
ls -lh /path/to/old/nginx ./objs/nginx - 检查动态依赖变化:
ldd ./objs/nginx | wc -l,减少 4–8 个库通常意味着重写、PCRE 或 Memcached 等模块已成功剥离
别忘了配置层同步清理
模块禁用后,配置文件中对应指令(如 autoindex on、auth_basic、proxy_pass)若仍存在,Nginx 启动时会报错。务必执行 nginx -t 验证语法,并人工清理或注释掉相关配置块。


















