apache中的ifmodule指令是否有任何替代方法?
我正在尝试为我们公司创建一个通用的 nginx.conf 文件,但有些站点具有 geoip 模块的特殊要求。在这些站点中,我需要在 nginx.conf 的 http 部分中声明一个指令来定义国家数据库。
问题是在其他服务器中,该模块没有被编译,所以我需要一个警告,只有在安装了该模块时才加载它。
任何的想法?提前致谢!
最佳答案
很抱歉让您失望了,这是不可能的,不是今天的 nginx。通过不同的论坛和邮件列表不止一次说过 nginx 配置不支持宏或条件包含。这就是你所追求的。配置,除了一些最小的东西在 nginx 中是相当静态的。你不能像在 apache 上那样“编程”它。我会很高兴知道我错了,但我们都在使用 ATM 黑客。取决于您的环境,但如果您控制服务器,则可以将 geoip 放入单独的目录并使用 globbing 包含。也就是说,不要在没有 geoip 的服务器上放置任何文件,如果存在模块,则不要在其中放置带有 geoip config 的配置文件。如果这不是一个选项,您可能必须修改初始化脚本来进行检查并调整配置。
例子:
假设你有一个目录:/etc/nginx/geoip/
在具有 geoip 模块的服务器上,目录中有一个文件:default.http.scope
文件内容:
geoip_country /usr/share/GeoIP/GeoIP.dat
在没有 geoip 模块的服务器上,目录是空的。
在 http 范围的 nginx 配置中,您可以安全地执行以下操作:
include /etc/nginx/geoip/*.http.scope
在两台服务器上,只有文件与模式匹配的服务器才会尝试配置 geoip。
关于nginx - 仅当安装了模块时才在 nginx.conf 中应用指令(apache ifmodule 替代方案),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20501374/