最有效减小nginx体积的方式是编译时用--without-xxx显式禁用默认启用但实际不用的模块;需先运行nginx -v查看当前配置,再按用途安全禁用静态、后端协议、安全类模块,或整类禁用mail/stream/debug。

编译时剔除不需要的默认模块,是减小 Nginx 二进制体积最有效的方式。关键不是“不加”,而是用 --without-xxx 显式禁用那些默认就启用、但你实际不用的模块。
先确认当前启用了哪些模块
运行命令:
nginx -V
输出中会显示完整的 configure 参数。这是你精简的起点——看清哪些模块已被编译进去,避免误删依赖项。比如看到 --with-http_ssl_module,说明 HTTPS 支持已启用;若看到 --without-http_proxy_module,则代理模块已被关掉。
按用途安全禁用常见默认模块
多数轻量场景(如纯静态服务、仅反向代理 HTTP 后端)可放心关闭以下模块:
- 静态与基础功能类:--without-http_autoindex_module(防目录遍历)、--without-http_ssi_module(SSI 已淘汰且有风险)、--without-http_browser_module、--without-http_empty_gif_module
- 后端协议类:--without-http_fastcgi_module(PHP 不用时可删)、--without-http_scgi_module、--without-http_uwsgi_module、--without-http_memcached_module
- 安全与扩展类:--without-http_auth_basic_module(无密码保护需求时)、--without-http_dav_module(高危,除非明确需要)、--without-http_flv_module、--without-http_mp4_module
整类功能一键屏蔽
邮件和四层代理在绝大多数 Web 服务中完全用不到,直接禁用整类更彻底:
- --without-mail:移除 POP3/IMAP/SMTP 全部支持
- --without-stream:关闭 TCP/UDP 四层转发能力(不影响 HTTP/HTTPS 七层代理)
- --without-debug:去掉调试符号,通常减少 15% 左右体积
编译后验证是否生效
完成 configure 和 make 后,别急着 install,先验证:
- 执行 ./objs/nginx -V,检查输出里是否已不含被禁用模块的字样
- 对比大小:ls -lh /usr/local/nginx/sbin/nginx ./objs/nginx
- 观察依赖:ldd ./objs/nginx,若不再链接 libpcre.so,说明 rewrite 模块已成功剔除
不复杂但容易忽略。











