Nginx proxy_set_header 用于 RPC 管理的主机

Nginx proxy_set_header 用于 RPC 管理的主机

我们正在试验 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

为我解决了这个问题。

相关内容