nginx - 仅当安装了模块时才在 nginx.conf 中应用指令(apache ifmodule 替代方案)

标签 nginx

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/

相关文章:

c# - 有没有办法在 ASP.NET Core 3.1 应用程序端点中应用服务器 SSL 证书?

php - Docker PHP7.x Codeception Selenium WebDriver 抛出 net::ERR_CONNECTION_REFUSED

regex - 如果请求 URI 不包含某些单词,如何在 nginx 中重定向

node.js - 使用pm2启动node.js应用程序: bad gateway from proxy_verse server

ruby-on-rails - 当连接到多个数据库时,Rails 从其他请求返回结果。

ruby-on-rails - Rails SSL 搞砸了内容

php - 如果找不到,我们如何使用 Apache 重定向到新的 HTML 静态内容并回退到旧的基于 CMS 的 PHP 版本? (nginx try_files)

python - Ubuntu Modoboa 从 NGINX 到 APACHE2 : HttpS 403 forbidden while HTTP is correctly accessible. (mod_WSGI)

nginx - CentOS 上的 PHP 和模块 API 不匹配

angularjs - 使用 NginX 提供 Angular 应用程序