请帮助我,因为我在使用 Dockerized Kong 从 REST 端点获取数据时收到“从上游服务器收到无效响应”错误。
我尝试使用 Kong 访问的 REST 服务正在我的本地主机上运行。
Kong 请求添加 API :
curl -i -X POST \
--url http://localhost:8001/apis/ \
--data 'name=ping' \
--data 'upstream_url=http://localhost:8080/v1/employee/ping' \
--data 'hosts=localhost'
通过 Kong 转发请求:
curl -i -X GET \
--url http://localhost:8000/ \
--header 'Host:localhost'
我通过 Kong 转发请求时出错:
[root@c1c865250782 etc]# curl -i -X GET --url http://localhost:8000/ --
header 'Host:localhost'
HTTP/1.1 502 Bad Gateway
Date: Fri, 29 Dec 2017 08:53:40 GMT
Content-Type: text/plain; charset=UTF-8
Transfer-Encoding: chunked
Connection: keep-alive
Server: kong/0.11.2
An invalid response was received from the upstream server
请帮我解决这个问题。
谢谢, 卡马尔
最佳答案
我认为您遇到了在开始使用 Docker 时遇到的经典 IP/主机问题。这里的关键是你必须注意让你的 dockerized Kong 能够到达你的 localhost
从 docker 容器内部。这里的问题(很可能)是 Kong(在 docker 内部)试图访问 http://localhost:8080
。但对于 Kong 来说,这是它自己运行的容器。
要进行此类测试,您必须找到本地计算机的 IP 地址并将其添加为 upstream_url
。根据您的机器所在的位置,是在家庭网络中还是在公司网络中,它类似于 10.x.y.z
或 192.168.x.y
。命令 ifconfig
(macOS) 或 ipconfig
(Windows) 将帮助您找到该地址。通过使用此 IP,Kong 现在可以解析您本地计算机的端口 8080,而不是转到它自己的端口 8080。
请注意,这意味着每次更改机器的 IP 地址时,您都需要在 Kong 中重新配置 API。取决于它是笔记本电脑,还是您使用 DHCP 等,这种情况或多或少会出现。
tl;dr:上游 URL 必须是一个能够让 Kong 解析目标的 URL,从 Docker 容器内部看。
关于java - Dockererized Kong 在 Windows 上给出 "An invalid response was received from the upstream server",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48020283/