我们正在试验一个 RPC 服务(linkerd),它充当我们微服务之间的粘合剂——从本地 Consul 集群等读取它们的位置。现在 Linkerd 希望看到Host
传入请求的标头以确定要访问的服务。
在我们的拓扑中,我们让 nginx 作为边缘运行,然后应该代理到 Linkerd 并根据路径设置 Host 标头。
因此,我们正在测试的一个简单配置如下所示;
location /api/v1/services/service-x {
proxy_set_header Host service-x;
proxy_pass http://linkerd:4140;
}
这没什么特别的。它匹配作为 的路径的路径service-x
,然后尝试将这些请求 proxy_pass 到带有 Linkerd 应该接收的标头中设置的服务名称的 linkerd。
我们看到的是 Host 标头从未设置。如果我可以通过 Linkerd 访问该服务curl -H "Host: service-x" linkerd:4140/some/x/path
。
我们应该如何使用 nginx 为上游设置标头?还是我在做一些愚蠢的事情?
谢谢!
这实际上是我错过
HTTP/1.1
的——linkerd 支持开箱即用,nginx 使用 1.0 转发到 linkerd 服务。添加为我解决了这个问题。