我想要做的就是防止configuration段的无效指令在没有安装正确模块的nginx中运行。 像Apache中的IfModule指令( http://httpd.apache.org/docs/current/mod/core.html#ifmodule )。 在nginx中是否存在类似的东西?
如果加载了特定的模块,Apache的<IfModule>将应用一组指令。
由于Nginx不支持dynamic模块加载,所以此function不可用。
资料来源: http : //trac.nginx.org/nginx/ticket/126
据我所知,无法从configuration文件中确定function的可用性。
如果希望testing在当前设置下是否可以改变configuration,可以在更改/etc/init.d/nginx configtest前使用configtest命令: nginx -t (或/etc/init.d/nginx configtest )。 这并不理想。
nginx支持从版本1.9.11(二月2016公告 )dynamic模块加载。 不过,不能根据存在或不存在模块来提供备用configuration。
不应该混淆dynamic或静态加载模块的能力,也不能混淆使用configuration文件中的指令来testing相关模块是否被启用的能力。 无论将模块添加到二进制文件的方式如何,能够testing模块化function是否可用都是一个合理的function。 这个function还没有,除了几个模块在configuration中有明显的副作用(例如添加一个自定义的响应头,在请求处理的后续步骤中就可以看到)。
如果“脚本粘连”是部署中用于testingfunction的选项,则可以在命令行上执行: nginx -V查看编译时已知模块的列表。 输出将混合使用--with-*和--add-dynamic-module --with-*标志。
--with-http_v2_module表示一个模块(即本例中的http_v2_module)静态编译到二进制文件中; --add-dynamic-module=/path/to/module_name表示一个dynamic模块。 它可以是en(dis)而不用重新编译nginx,使用load_module module_name.so核心指令。