【问题标题】:Multiple domains with same URIs but different proxy_pass in NginXNginX中具有相同URI但不同proxy_pass的多个域
【发布时间】:2016-03-19 22:29:27
【问题描述】:

我有一个 nginx 实例,它负责处理生产和预生产域(domain.com 和 pre.domain.com)。

目前我对两个域都有单独的“服务器”块。但是,这些块的内容几乎相同 - 相同的 URI 但代理到不同的后端服务器。我想要更清晰的 nginx 配置,所以我考虑将域放在同一个“服务器”块中,并基于域进行代理。

不幸的是,下面的示例似乎不起作用:

server_name pre.domain.com domain.com;
location /someuri {
        if ($host = 'pre'domain.com') {
        proxy_pass  http://pre.backend/someuri;
        }
        proxy_pass  http://backend/someuri;
}

不幸的是,由于以下错误,我的想法失败了:

nginx: [emerg] "proxy_pass" cannot have URI part in location given by regular expression, or inside named location, or inside "if" statement, or inside "limit_except" block in /etc/nginx/conf.d/default.conf:17

我也尝试过使用“地图”,但结果是一样的。

问题是:是否有可能在一个“服务器”块中处理多个域并从不同上游获取“相同”URI 的内容?

提前感谢您的提示。

【问题讨论】:

  • 您是否尝试过将/someuriproxy_pass 的末尾删除(假设它与位置相同),因为实际上不需要进行任何转换。你读过if is evil吗?
  • 谢谢,我需要检查这种方法是否适用于所有后端服务器。我在 nginx 中多次看到这篇关于“if”的文章,但老实说,当我想将所有内容保存在一个“服务器”块中时,我没有看到比使用此语句更好的解决方案。

标签: nginx proxy


【解决方案1】:

使用单独的服务器配置并避免使用“if”指令。您可以在包含文件中为所有服务器保持相同的配置。

server {
server_name domain.com;
location /someuri {
   proxy_pass  http://backend/someuri;
}
include domain.com.cfg;
}

server {
server_name pre.domain.com;
location /someuri {
   proxy_pass  http://pre.backend/someuri;
}
include domain.com.cfg;
}

【讨论】:

  • 谢谢,但这不能解决我的问题。我有大约 50 个“位置”指令,它们代理不同的后端服务器。两个域完全相同的部分已包含在单独的配置文件中。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-21
  • 2021-05-10
  • 2019-05-09
  • 1970-01-01
  • 2020-12-15
  • 1970-01-01
相关资源
最近更新 更多