我如何查看 Nginx 编译时使用了哪些标志?

我如何查看 Nginx 编译时使用了哪些标志?

如何检查哪些模块已添加到 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.112016 年 2 月起 —现在支持动态加载模块, 也 -http://nginx.org/r/load_module——在该指令的帮助下load_module

相关内容