6

我想使用 Kong 作为我的 API 网关,在 Docker 容器中运行。每个请求都必须首先通过 NgInx 服务器,如果请求的 uri 与 example.com/api 匹配,则它必须生成在 Kong 内部注册的 api。

为了实现这一点,我使用以下命令将我的 API 添加到 Kong:

curl -i -X POST --url ipnumber:8001/apis -d 'name=my-api' -d `enter code here`'upstream_url=http://httpbin.org' -d 'hosts=example.com' -d 'uris=/api/my-api'

通过执行以下命令,我得到了正确的答案,所以我认为 Kong 工作正常。

curl -i -X GET --url ipnumber:8000/api/my-api --header 'Host: example.com'

我的 NgInx 配置如下所示:

upstream kong {
  server 127.0.0.1:8000;
}

location /api {
   proxy_pass: http://kong;
}

在我的主机文件中,我使用域 example.com 配置了 NgInx 服务器的 IP。

问题是:当我浏览到 example.com/api/my-api 甚至 example.com/my-api 时,结果是 NgInx 的 404 错误页面。

当我浏览到 ipnumber:8000/api/my-api 时,它会显示 Kong 的消息,说没有与给定值匹配的 api,这是正确的,因为主机名不是 example.com

我已经在寻找这个问题很长时间了,但我一直无法解决它。我也在寻找https://getkong.org/docs/0.10.x/configuration/#custom-nginx-configuration-embedding-kong但我不确定我是否必须这样做,因为我已经我自己的nginx配置。

提前感谢您的反馈。

4

1 回答 1

1

您需要告诉 NGINX 将 Host 标头上游转发到 Kong。你可以这样proxy_set_header做:

location /api {
   proxy_pass: http://kong;
   proxy_set_header Host $host;
}
于 2018-02-03T20:53:05.800 回答