#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
评论
另一种说法是“如何查看Nginx编译了哪些标志?”只是想添加它以增加可搜索性。