我有一个上游下面的例子与简单只需一台服务器:
upstream EarthML_IdentityService {
server localhost:25303 ;
}
map $upstream_addr $EarthML_IdentityServiceuniquepath {
default "7ab713ad-9ca5-4b08-8d32-84ec2e69370a/131365180085121149";
127.0.0.1:25303 "7ab713ad-9ca5-4b08-8d32-84ec2e69370a/131365180085121149";
}
和位置代理
location ~* ^/(subscriptions/.*/)?(resourcegroups/.*/)?providers/(EarthML.Identity) {
rewrite^/$EarthML_IdentityServiceuniquepath$uri break;
proxy_pass http://earthml_identityservice;
server_name_in_redirect on;
port_in_redirect off;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection keep-alive;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Path $request_uri;
proxy_connect_timeout 3s;
proxy_set_header X-Forwarded-PathBase /;
proxy_cache_bypass $http_upgrade;
add_header X-Upstream $upstream_addr;
}
,但如果我删除地图的default
条目,那么它停止工作。我在标题中添加了add_header X-Upstream $upstream_addr;
,以确定X-Upstream
确实设置为127.0.0.1:25303
'rewrite'之前'proxy_pass'执行,这样的nginx尚未确定'$ upstream_addr'会是什么。 –
其实,你想要一些奇怪的东西。你试图解决什么问题? –
我的问题是服务beering代理由3个节点支持,但在每个节点上,服务路径前缀有不同的唯一前缀。这是Azure上的服务结构,可以像这样设置,因为当名称服务在应用程序升级的情况下解析服务时,它有机会丢弃以错误服务结束的错误请求。我是我自己的实现,它跳过了这些独特的前缀,并使用自定义头进行相同的验证,因此我可以简化nginx的东西。我同意,上面很奇怪。 –