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


227

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


7
另一种说法是“如何查看Nginx编译了哪些标志?” 只是想添加它以增加可搜索性。
内森·朗

Answers:


291

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


8
注意:如果没有以root用户身份登录,则命令为sudo nginx -V
its_me 2013年

4
我不需要sudo在Ubuntu 14.04 上使用
Asfand Qazi

5
请注意,此参数区分大小写。如果使用小写字母“ -v”,则只会获得版本号。大写的“ -V”为您提供完整的配置,包括用于编译Nginx二进制文件的所有模块的列表。
伊利丹

1
似乎某些系统可能没有$PATH为非超级用户正确设置的设置sbin,从而忽略了所有目录,因此,您可能必须指定守护程序的完整路径(例如/usr/sbin/nginx -V),或者实际上只是使用sudo
cnst

@its_me ...您可能不需要sudo才能运行nginx -V
Carson Reinke

64

可扩散单线:

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个安装之间区分编译标志,如下所示:

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本地外壳即可,这sort将是一致的:

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

杂乱无章,但行得通。


2
2>&1 nginx -V | tr -- - '\n' | grep _module该命令完全错误,因为它列出了未安装的*选项!
罗曼·纽瓦萨

很棒的答案。出于兴趣,为什么将2>&1放在前面。从我所看到的那是不寻常的?
cavalcade'2

@MattTagg,直到使用它才在前面。然后在任一命令的末尾。
kmarsh

3
  • 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 : load_module//nginx.org/r/load_module。


1

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

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

我也尝试过,objdump但看起来安装中的nginx二进制文件被剥夺了。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.