我们正在试验 RPC 服务(链接器) 充当我们微服务之间的粘合剂——从本地 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 设置上游的标头?还是我做了一些愚蠢的事情?
谢谢!
答案1
这实际上是我忽略的一点——linkerd 支持HTTP/1.1
开箱即用,而 nginx 使用 1.0 来转发到 linkerd 服务。添加
proxy_http_version 1.1
为我解决了这个问题。