如果安装了模块,则在nginx.conf中应用指令(apache ifmodule alternative)

时间:2013-12-10 17:35:25

标签: nginx

apache中有ifmodule指令的替代方法吗?

我正在尝试为我们公司创建一个通用的nginx.conf文件,但有些网站有geoip模块的特殊要求。在这些站点中,我需要在nginx.conf,http部分中声明一个指令来定义国家数据库。

问题在于,在其他服务器中,该模块未被编译,因此只有在安装该模块时才需要加载它。

有什么想法吗?提前谢谢!

1 个答案:

答案 0 :(得分:4)

很抱歉让人失望,这是不可能的,不是今天的nginx。据说不同的论坛和邮件列表不止一次nginx配置不支持宏或条件包含。你追求的是什么。配置,除了一些最小的东西在nginx中是非常静态的。你不能像在apache上那样“编程”它。我会很高兴得知我错了,但ATM我们都采用黑客攻击。取决于您的环境,但如果您控制服务器,您可以将geoip放入单独的目录并使用globbing来包含。也就是说,如果没有geoip,请不要在服务器上放置任何文件,如果模块存在,请在其中放置带geoip配置的配置文件。如果这不是一个选项,您可能需要修改init脚本来进行检查并调整配置。

示例:

假设您有一个目录:/etc/nginx/geoip/

在具有geoip模块的服务器上,目录中有一个文件:default.http.scope

文件内容:

geoip_country /usr/share/GeoIP/GeoIP.dat

在没有geoip模块的服务器上,该目录为空。

在http范围的nginx配置中,您可以安全地执行:

include /etc/nginx/geoip/*.http.scope

在两台服务器上,只有具有与该模式匹配的文件的那台将尝试配置geoip。