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

评论

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

#1 楼

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

评论


给noobs的提示:如果未以root用户身份登录,则命令为sudo nginx -V

–its_me
13年2月8日在4:08

我不需要在Ubuntu 14.04上使用sudo

–阿斯范·卡兹
2015年6月11日14:53

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

–伊利丹
16年11月6日在7:43

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

–cnst
17年8月26日在19:14

@its_me ...您可能不需要sudo来运行nginx -V

–卡森·莱因克(Carson Reinke)
19年7月10日在1:30



#2 楼

可扩散单线:

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'


也可以通过sort进行管道传输,以规范编译标志的特有顺序,然后再次通过tr将分配拆分为可扩散行。最终结果:

2>&1 nginx -V | xargs -n1


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

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


Messier,但是可以用。

评论


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

–罗马纽萨(Roman Newaza)
13年3月28日在9:07

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

–行军
2015年2月18日在2:46

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

–kmarsh
16年6月29日在18:23

#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 1.9.11(2016年2月)开始,nginx发行版也受load_module指令的支持,现在也支持动态可加载模块-http://nginx.org/r/load_module。


#4 楼

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

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

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

评论


这确实对我有帮助,并且是唯一的正确答案。 nginx -V无法获取内置模块。

–威廉斯
6月10日13:05