要查看 Nginx 编译时默认携带的参数,应进入源码目录执行 cat auto/options | grep "=YES",该命令列出源码级默认启用的模块(如 HTTP=YES、HTTP_REWRITE=YES),但实际是否编译进二进制还取决于依赖检测和显式禁用情况。

要查看 Nginx 编译时默认携带的参数(即源码中预设启用、无需显式加 --with- 也能生效的模块),不能依赖 nginx -V 输出,因为它只反映实际编译时传入的 configure 参数,不包含源码级默认行为。
查源码目录下的 auto/options 文件
进入你使用的 Nginx 源码解压目录(如 nginx-1.26.2/),执行:
-
cat auto/options | grep "=YES"—— 显示所有默认启用的模块和功能开关 -
cat auto/options | grep "^HTTP_"或grep "MAIL=" auto/options—— 快速定位 HTTP 或 MAIL 子系统默认状态
例如输出中含 HTTP_SSL=YES,表示即使没写 --with-http_ssl_module,该模块也会被启用(但实际生效仍需 OpenSSL 开发库存在);而 EVENT_SELECT=YES 表示 select 事件驱动模型是兜底默认启用的。
注意区分“默认启用”和“实际编译启用”
auto/options 中的 =YES 是源码层面的默认策略,但最终是否真被编译进二进制,还取决于:
- configure 脚本是否检测到必要依赖(如无
openssl-devel,HTTP_SSL=YES也会被静默跳过) - 是否显式用
--without-xxx禁用 - 是否因平台限制自动降级(如 Linux 下 epoll 优先于 select,即便 select 默认 YES,也可能未被编译)
验证当前运行版实际启用了哪些默认模块
结合 nginx -V 和源码信息交叉判断:
- 先运行
nginx -V 2>&1 | grep "configure arguments",提取 configure 行 - 对照源码
auto/options中标为=YES的项,看哪些没出现在 configure 行里——说明它们是靠默认策略启用的 - 例如:configure 行中无
--with-http_gzip_module,但auto/options有HTTP_GZIP=YES,且 Nginx 启动后 gzip 功能正常,则确认它是默认启用的
常见默认启用的模块(以主流 stable 版为准)
以下模块在多数 Nginx 源码版本中默认为 =YES,无需手动添加配置即可使用(前提是依赖满足):
-
HTTP=YES(核心 HTTP 框架) -
HTTP_REWRITE=YES(支持rewrite指令) -
HTTP_PROXY=YES(反向代理基础能力) -
HTTP_ACCESS=YES(allow/deny) -
HTTP_LOG=YES(日志模块) -
EVENT_POLL=YES或EVENT_EPOLL=YES(根据系统自动选)
而像 http_ssl_module、http_v2_module、http_stub_status_module 等虽常用,但通常需显式指定才启用,不属于“默认携带”范畴。


















