如何通过 nginx 配置检查 nginx 模块是否已安装?

如何通过 nginx 配置检查 nginx 模块是否已安装?

我想要做的是防止在未安装正确模块的 nginx 中运行带有无效指令的配置段。Apache 中的 IfModule 指令(http://httpd.apache.org/docs/current/mod/core.html#ifmodule)。nginx 中是否存在类似的东西?

答案1

如果加载了特定模块,Apache 将<IfModule>应用一组指令。

由于Nginx不支持动态模块加载,因此此功能不可用。

来源:http://trac.nginx.org/nginx/ticket/126

答案2

据我所知,无法从配置文件中确定功能是否可用。

如果希望测试配置更改是否在当前设置下有效,可以在更改生效之前使用 configtest 命令:(nginx -t/etc/init.d/nginx configtest)。但这并不理想。

nginx 从 1.9.11 版本开始支持动态模块加载(2016 年 2 月公告)。但是,我们无法根据模块的存在与否来提供替代配置。

不应将动态或静态加载模块的能力与使用配置文件中的指令测试相关模块是否启用的能力混为一谈。无论模块以何种方式添加到二进制文件中,能够测试模块化功能是否可用都是值得支持的合理功能。该功能目前尚未实现,除了少数在配置中具有明显副作用的模块(例如,添加自定义响应标头将在请求处理的后续步骤中可见)。

如果部署中有一个选项“脚本粘合”用于测试功能,则在命令行上可以执行:nginx -V查看编译时已知模块的列表。输出将包含--with-*--add-dynamic-module标志的混合。

  • --with-http_v2_module表示静态编译​​到二进制文件中的模块(在本例中即 http_v2_module);
  • --add-dynamic-module=/path/to/module_name表示动态模块。可以使用load_module module_name.so核心指令来启用(禁用)而无需重新编译 nginx。

相关内容