nginx模块启用或禁用必须在./configure阶段通过--with-或--without-参数确定,漏配则功能不可用;关键模块如--with-http_ssl_module、--with-http_v2_module、--with-http_realip_module需显式启用,禁用非必要模块可减小体积;路径与用户参数(如--prefix、--user)影响部署稳定性;第三方模块通过--add-module引入。

编译安装 Nginx 时,模块的启用或禁用完全由 ./configure 脚本参数控制,不是装完再配置,而是在生成 Makefile 阶段就定死了功能边界。
启用关键模块:用 --with- 开头的参数
这些模块默认不编译,必须显式声明才可用。漏掉一个,对应功能就彻底不可用。
-
--with-http_ssl_module:必须加,否则
listen 443 ssl会报错,且无法处理 HTTPS;需系统已安装 OpenSSL 开发包(如 Debian 的libssl-dev) -
--with-http_v2_module:Nginx 1.9.5+ 默认不编译 HTTP/2,要支持
http2关键字必须加上,且 OpenSSL 版本不低于 1.0.2 -
--with-http_realip_module:反向代理场景下读取
X-Forwarded-For获取真实 IP,没它,set_real_ip_from指令无效 - --with-file-aio:仅 Linux 有效,需内核支持 + ext4/xfs 文件系统,大文件传输时可提升吞吐
禁用非必要模块:用 --without- 开头的参数
很多模块默认是开启的,比如基础协议模块或日志处理模块。若确认用不到,禁用可减小二进制体积、降低潜在攻击面。
- --without-http_scgi_module 和 --without-http_uwsgi_module:纯静态服务或只走 FastCGI(如 PHP-FPM)时可关
-
--without-http_gzip_module:若前端已有 CDN 或负载均衡做压缩,后端 Nginx 可省略;但注意:禁用后
gzip相关指令全部失效 - --without-http_charset_module:不处理字符集自动转换时可关,节省少量内存
路径与运行环境参数不能忽略
模块开关只是功能层面,路径和用户权限等参数影响实际部署稳定性。
-
--prefix=/etc/nginx:统一安装根目录,避免混在
/usr/local下难管理 - --conf-path=/etc/nginx/nginx.conf:明确配置文件位置,防止启动时找不到配置
-
--user=www-data --group=www-data:指定工作进程用户,比默认
nobody更符合生产习惯 - --error-log-path=/var/log/nginx/error.log 和 --http-log-path=/var/log/nginx/access.log:日志路径独立于 prefix,便于日志轮转和权限隔离
集成第三方模块:用 --add-module
官方模块之外的功能(如 RTMP、Lua、Brotli)需额外源码,通过该参数引入。
- 路径必须是绝对路径,指向解压后的模块源码目录,例如:
--add-module=/path/to/ngx_brotli - 多个模块可重复使用
--add-module,顺序一般不影响,但若有依赖关系(如 Lua 依赖 PCRE),需确保基础依赖已启用(如--with-pcre) - 第三方模块通常自带文档说明依赖项,编译失败时优先查它是否要求特定 OpenSSL 或 zlib 版本











