我们正在试验一种RPC服务( linkerd ),它充当我们的微服务之间的粘合剂 – 从本地Consul集群中读取它们的位置。现在,Linkerd希望在传入的请求上看到Host标头,以确定要打哪个服务。
在我们的拓扑结构中,我们有nginx作为边缘运行,然后应该代理到Linkerd,并根据path设置Host头。
所以我们testing的一个简单的configuration看起来像这样;
location /api/v1/services/service-x { proxy_set_header Host service-x; proxy_pass http://linkerd:4140; }
这不是什么幻想。 它匹配service-xpath的path,然后尝试proxy_pass这些请求与linkerd所设置的服务名称链接。
我们所看到的是Host头永远不会被设置。 如果我curl -H "Host: service-x" linkerd:4140/some/x/path通过Linkerd访问该服务。
我们应该如何使用nginx为上游设置标题? 还是我在做一些愚蠢的事情?
谢谢!
这实际上是我错过了 – linkerd支持HTTP/1.1开箱即用和nginx使用1.0转发到链接服务。 添加
proxy_http_version 1.1
解决了我的问题。