核心在于编译时剔除未使用的模块,而非运行时卸载;执行nginx -V查看configure arguments,确认--without-参数禁用HTTP、mail、stream等非必要模块,可使每个worker进程内存降低2–6 MB。

清理废弃模块降低内存占用,核心在于编译时剔除未使用的模块,而不是运行时“卸载”——Nginx 不支持动态加载/卸载模块,所有模块在编译阶段就已静态链接进二进制文件。
确认当前启用的模块
执行 nginx -V(注意是大写 V),查看输出末尾的 configure arguments。这一行明确列出所有显式启用(--with-xxx)和禁用(--without-xxx)的模块。这是判断“哪些被包含”的唯一权威依据。别只看配置文件里有没有用到某指令,没用到 rewrite 指令,只要 --with-http_rewrite_module 在编译参数里,它就占着内存。
重点裁剪 HTTP 模块
HTTP 模块是内存占用主力,多数轻量服务只需静态文件、反向代理和基础 SSL。以下模块可安全移除:
- --without-http_autoindex_module:禁用目录列表,除非你真需要用户浏览 / 目录
- --without-http_ssi_module:SSI 在现代架构中基本淘汰
- --without-http_geo_module 和 --without-http_map_module:无 IP 区域判断或变量映射需求时可删
-
--without-http_rewrite_module:若完全不用
rewrite、return、if,改用try_files或由 CDN 处理路由,即可禁用 - --without-http_scgi_module、--without-http_uwsgi_module:不对接 SCGI/UWSGI 后端时移除
- --without-http_perl_module、--without-http_xslt_module:生产环境极少使用
关闭整类非核心功能
除非你明确需要邮件代理或 TCP/UDP 四层负载均衡,否则应彻底屏蔽:
- --without-mail_pop3_module、--without-mail_imap_module、--without-mail_smtp_module
- --without-stream_module:禁用 stream 模块不影响 HTTP/HTTPS 七层代理
这些模块一旦启用,会引入额外依赖和内存开销,哪怕配置中一行相关指令都没写。
编译与验证要点
精简不是简单加几个 --without,还要控制构建环境:
- 只装必需依赖:
libpcre3-dev zlib1g-dev libssl-dev(Debian)或pcre-devel zlib-devel openssl-devel(CentOS),避免因缺失依赖导致 configure 自动降级启用替代方案 - 指定独立安装路径,例如
--prefix=/usr/local/nginx-min,防止覆盖现有部署 - 编译完成后再次运行 nginx -V,逐项核对目标模块是否出现在
--without-xxx列表中 - 启动后观察 RES 内存值(如用
ps aux | grep nginx查看),通常每个 worker 进程可减少 2–6 MB


















