题 如何查看Nginx编译的标志?


如何查看已添加到nginx安装的模块?


211
2018-01-17 20:42




另一种说法是“我怎样才能看到Nginx编译过哪些标志?”只想添加它以增加可搜索性。 - Nathan Long


答案:


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


268
2018-01-17 21:35



新手注意事项: 如果未以root用户身份登录,则命令为 sudo nginx -V - its_me
我不需要使用 sudo 在Ubuntu 14.04上 - Asfand Qazi
请注意,此参数区分大小写。如果您使用小写“-v”,您将只获得版本号。大写字母“-V”为您提供完整的配置,包括用于编译Nginx二进制文件的所有模块的列表。 - Illidan
它似乎 像一些系统可能没有 $PATH 为非超级用户正确设置,省略所有 sbin 目录,因此,您可能必须指定守护程序的完整路径(例如, /usr/sbin/nginx -V),或者确实只是使用 sudo。 - cnst


可扩展的单线程:

2>&1 nginx -V | tr -- - '\n' | grep _module

方便比较两种环境:

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

编辑:

感谢Roman Newaza正确地指出这包括 --without 模块编译标志。我没用 --without 标志,只是专注于获取模块列表,所以我没有抓住它;可以修改单行程以帮助在两个安装之间编译标记,如下所示:

2>&1 nginx -V | tr ' '  '\n'

这与:

2>&1 nginx -V | xargs -n1

也许也管道通过 sort 规范化编译标志的特殊顺序和 tr 再次将分配拆分为差异线。最后结果:

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

这有用 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')

梅西耶,但它确实有效。


60
2018-01-25 20:30



2>&1 nginx -V | tr -- - '\n' | grep _module 命令是完全错误的,因为它列出了没有安装的*选项! - Roman Newaza
很棒的答案。出于兴趣,你为什么要把2> 1放在前面。从我所看到的更不寻常? - cavalcade
@MattTagg它只在它使用之前才​​在前面。然后它就在任一命令的末尾。 - kmarsh


  • nginx -V 命令(大写V)将列出所有模块,以及其他编译时选项:

    %nginx -V nginx version: nginx/1.2.2 built by gcc 4.2.1 20070719 TLS SNI support enabled configure arguments: --prefix=/var/www --conf-path=/etc/nginx/nginx.conf --sbin-path=/usr/sbin/nginx --pid-path=/var/run/nginx.pid --lock-path=/var/run/nginx.lock --http-log-path=logs/access.log --error-log-path=logs/error.log --http-client-body-temp-path=/var/www/cache/client_body_temp --http-proxy-temp-path=/var/www/cache/proxy_temp --http-fastcgi-temp-path=/var/www/cache/fastcgi_temp --http-scgi-temp-path=/var/www/cache/scgi_temp --http-uwsgi-temp-path=/var/www/cache/uwsgi_temp --user=www --group=www --with-http_gzip_static_module --with-http_ssl_module --with-http_stub_status_module --with-ipv6 --without-mail_pop3_module --without-mail_imap_module --without-mail_smtp_module %

    请注意,从来没有任何需要 sudo 对于此命令,由于nginx仅在下面打开端口时需要超级用户权限 IPPORT_RESERVED (例如,1024以下的端口) 和/或用于写入的某些日志文件。

    但是,取决于你的 $PATH 设置,您可能需要指定完整路径 - 例如, /usr/sbin/nginx -V,或确实使用 sudo 有适当的 /sbin/ 目录包含在 $PATH

  • 从较新的nginx版本开始 - 从那以后 nginx 1.9.11 (2016年2月) - 现在支持动态可加载模块也是 - http://nginx.org/r/load_module  - 在...的帮助下 load_module 指示。


3
2017-08-26 19:06