如何查看 Nginx 编译时使用了哪些标志?

Man*_*ano 245 nginx

如何检查已将哪些模块添加到 nginx 安装中?

Jor*_*ris 305

nginx -V将列出所有配置的模块。没有明确的启用/加载命令。

  • **菜鸟注意:** 如果不是以 root 用户身份登录,则命令为 `sudo nginx -V` (9认同)
  • 请注意,此参数区分大小写。如果您使用小写的“-v”,您将只获得版本号。大写“-V”为您提供完整的配置,包括用于编译 Nginx 二进制文件的所有模块的列表。 (7认同)
  • 我不需要在 Ubuntu 14.04 上使用 `sudo` (5认同)
  • [似乎](//serverfault.com/a/870609/110020) 就像某些系统可能没有为非超级用户正确设置`$PATH`,省略所有`sbin` 目录,因此,您可能需要指定守护进程的完整路径(例如,`/usr/sbin/nginx -V`),或者实际上只是使用 [`sudo`](http://ports.su/security/sudo)。 (2认同)

小智 70

Diff-able one-liner:

2>&1 nginx -V | tr -- - '\n' | grep _module
Run Code Online (Sandbox Code Playgroud)

方便比较两种环境:

lsmodn="2>&1 nginx -V | tr -- - '\n' | grep _module"
diff -y <(ssh www-prd eval $lsmodn) <(ssh www-qa eval $lsmodn)
Run Code Online (Sandbox Code Playgroud)

编辑:

谢谢你,Roman Newaza,正确指出这包括--without模块编译标志。我没有使用--without标志,只是专注于获取模块列表,所以我没有注意到;可以修改 one-liner 以帮助在 2 个安装之间差异编译标志,如下所示:

2>&1 nginx -V | tr ' '  '\n'
Run Code Online (Sandbox Code Playgroud)

这与:

2>&1 nginx -V | xargs -n1
Run Code Online (Sandbox Code Playgroud)

也许也可以通过管道将sort编译标志的特殊顺序标准化,并tr再次将分配拆分为可区分的行。最后结果:

lsmodn="2>&1 nginx -V | xargs -n1 | sort | tr = '\n'"
diff -y <(ssh www-prd eval $lsmodn) <(ssh www-qa eval $lsmodn)
Run Code Online (Sandbox Code Playgroud)

如果sort在两个远程主机上的行为相同(即它们都是 GNU 或 BSD),则该方法有效。如果您将 Linux 与 BSD (Mac OS X) 进行比较,只需将这| sort | tr = '\n'部分移到lsmodn本地 shell 中即可sort

lsmodn="2>&1 nginx -V | xargs -n1"
diff -y <(ssh linux eval $lsmodn | sort | tr = '\n') <(ssh macosx eval $lsmodn  | sort | tr = '\n')
Run Code Online (Sandbox Code Playgroud)

梅西耶,但它有效。

  • `2&gt;&amp;1 nginx -V | tr -- - '\n' | grep _module` 命令是完全错误的,因为它列出了没有安装的 -* 选项! (2认同)

小智 7

nginx -V没有显示所有模块,它为我显示了大约 20 个模块。

我使用strings /usr/sbin/nginx|grep _module|grep -v configure| sort它列出了我的 nginx 中的所有 200 多个模块。

我也尝试过objdump,但看起来我安装中的 nginx 已删除二进制文件。