我有一个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
我也尝试使用'map'但结果是一样的。
问题是:是否有可能在一个“服务器”块中处理多个域并从“不同上游”获取“相同”URI的内容?
提前感谢您的提示。
答案 0 :(得分:0)
使用单独的服务器配置并避免使用“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;
}