最权威方法是查看 nginx 源码中 auto/options 文件的 "=yes" 行,如 http_rewrite=yes、http_proxy=yes 等,表明这些模块默认启用;nginx -v 仅显示显式指定的 --with- 模块,无法反映默认启用项。

直接运行 nginx -V 只能查到你编译时显式指定的模块(如 --with-http_ssl_module),而 Nginx 官方源码中大量模块是**默认启用、无需手动添加**的,这些不会出现在 nginx -V 输出里。要确认默认编译了哪些模块,需结合源码中的配置定义。
查看源码 auto/options 文件中的 YES 项
Nginx 源码解压后,在 auto/options 文件中,所有以 =YES 结尾的行,代表该模块在标准编译流程中默认启用。这是最权威的依据。
- 进入 Nginx 源码目录(如
nginx-1.24.0/),执行:grep "=YES$" auto/options - 常见默认启用模块包括:
HTTP_REWRITE=YES(rewrite 指令可用)HTTP_PROXY=YES(proxy_pass 可用)HTTP_ACCESS=YES(allow/deny 可用)HTTP_AUTH_BASIC=YES(auth_basic 可用)HTTP_GZIP=YES(gzip 压缩可用)HTTP_UPSTREAM_IP_HASH=YES(负载均衡策略可用) - 注意:像
EVENT_SELECT=YES、NGX_FILE_AIO=YES这类底层事件或 I/O 模块也属默认启用,但通常无需手动干预
区分“默认启用”和“需显式开启”的模块
有些模块虽在源码中存在,但默认不启用,必须加 --with-xxx-module 才会编译进去;而另一些则只要不加 --without-xxx-module 就自动包含。
- 默认启用型(带
=YES):如HTTP_SSL、HTTP_STUB_STATUS、HTTP_REALIP—— 它们在绝大多数官方构建中都存在 - 可选启用型(无
=YES,但有--with-xxx和--without-xxx两套开关):如http_v2_module、stream_module、http_geoip2_module—— 必须显式声明才启用 - 第三方模块(如 echo、headers-more):完全依赖
--add-module=,不在auto/options中体现
验证默认模块是否实际可用
即使模块默认启用,也要确保配置语法正确且作用域合规,Nginx 才会加载其指令。
- 写一个最小配置测试指令,例如:
location / { deny all; }→ 若nginx -t不报错,说明ngx_http_access_module已就绪 - 检查报错信息:
若提示unknown directive "deny",说明 access 模块未编译(极少见,多见于定制精简版)
若提示"deny" directive is not allowed here,说明模块存在,只是用了错误位置(比如写在if块里) - 对关键功能如 HTTPS、gzip、proxy_pass,建议在真实配置中做端到端验证,而不仅依赖参数存在
快速对照常用默认模块与对应指令
以下模块在标准 Nginx 源码编译中默认启用,无需额外参数:
-
ngx_http_rewrite_module →
rewrite、return、if(注意:if 在 location 中受限) -
ngx_http_proxy_module →
proxy_pass、proxy_set_header(不可动态加载,必须静态存在) -
ngx_http_access_module →
allow、deny -
ngx_http_auth_basic_module →
auth_basic、auth_basic_user_file -
ngx_http_gzip_module →
gzip、gzip_types -
ngx_http_stub_status_module →
stub_status(需手动配location /status)











