如何检查哪些模块已添加到 nginx 安装?
答案1
nginx -V
将列出所有已配置的模块。没有明确的启用/加载命令。
答案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>&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')
混乱,但它有效。
答案3
nginx -V
没有显示所有模块,它为我显示了大约 20 个模块。
我使用strings /usr/sbin/nginx|grep _module|grep -v configure| sort
它来列出我的 nginx 中的所有 200 多个模块。
我也尝试过,objdump
但看起来我安装的 nginx 的二进制文件已被剥离。
答案4
该
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
。