当前位置: 首页 > 知识库问答 >
问题:

我的docker容器Kong用"从上游服务器收到无效响应"来响应

壤驷乐邦
2023-03-14

我在8000和8001端口上的本地linux机器上运行着金刚,在5000和5001端口上的docker容器中也运行着金刚。

我的应用程序正在tomcat服务器上的另一个容器上运行,端口8811(端口fwd从8811到8080)

我已经配置了以下API配置我的Kong容器,

curl -i -X POST \
 --url http://localhost:5001/apis/ \
 --data 'name=sample' \
 --data 'uris=/samplewar' \
 --data 'upstream_url=http://localhost:8811/sample/hello'

和我的linux机器金刚以下API配置,

curl -i -X POST \
 --url http://localhost:8001/apis/ \
 --data 'name=sample' \
 --data 'uris=/samplewar' \
 --data 'upstream_url=http://localhost:8811/sample/hello' 

当我做curl访问我的示例API时,我看到以下来自我的Kong容器的错误响应,

curl -i -X GET --url http://localhost:5000/samplewar
HTTP/1.1 502 Bad Gateway
Date: Thu, 28 Dec 2017 08:25:26 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

如果我尝试在linux框中调用相同的API,我会看到以下成功响应。

curl -i -X GET --url http://localhost:8000/samplewar

HTTP/1.1 200 OK
Content-Type: text/html;charset=ISO-8859-1
Content-Length: 311
Connection: keep-alive
Server: Apache-Coyote/1.1
Date: Thu, 28 Dec 2017 08:25:33 GMT
X-Kong-Upstream-Latency: 2
X-Kong-Proxy-Latency: 0
Via: kong/0.11.2

<html>
<head>
<title>Sample Application Servlet Page</title>
</head>
<body bgcolor=white>
<table border="0">
<tr>
<td>
<img src="images/tomcat.gif">
</td>
<td>
<h1>Sample Application Servlet</h1>
This is the output of a servlet that is part of
the Hello, World application.
</td>
</tr>
</table>
</body>
</html>

这里有什么问题?为何我的香港货柜没有作出适当回应?

共有1个答案

郭博涉
2023-03-14

经过一些试验和测试,我能够找出它失败的原因。

因为这里的场景是Kong在一个容器中运行,而在另一个容器中的Tomcat服务器上运行示例应用程序,所以Kong容器中upstream_url配置必须使用tomcat容器的ip和端口进行配置。(即"upstream_url=http://172.17.0.4:8080/sample/hello"--plhd--1/>是我的tomcat容器的IP地址)

curl -i -X POST \
--url http://localhost:5001/apis/ \
--data 'name=sample' \
--data 'uris=/samplewar' \
--data 'upstream_url=http://172.17.0.4:8080/sample/hello'

这解决了问题,但我不太确定这是否是最佳方案。

 类似资料:
  • 我有一个反向代理设置与nginx。 如何将从后端服务器发送到nginx的http请求(包括头)记录到文件中? 也许nginx http代理模块中的某个指令可以帮助我做到这一点。 但我找不到任何有用的指示。

  • 我正在尝试上传一个xml文件。当使用MultipartEntityBuilder将二进制格式的文件添加到HttpEntity时,我收到以下错误 我已经通过了链接 https://www.baeldung.com/httpclient-multipart-upload 我的理解是,该文件不被接受,因为http实体无法发送MultipartEntityBuilder,但我可能错了。

  • 我在做一个应用程序,把一些数据存储在数据库中,然后它再检索它。在服务器端,我使用的是PHP,在客户端,我有一个获取输入并将其传递给PHP文件的文件。 另外,我有这个JsonParser:

  • 有人知道netty服务器处理程序取消从web服务器接收数据的最佳方法吗?我有一个服务器处理程序,它将HttpRequests代理到web服务器。但是,当请求客户端取消请求时,我希望在不关闭服务器处理程序和web服务器之间的连接的情况下停止从web服务器接收服务器通道上的数据。 有谁知道我怎么才能做到这一点。你的答复将不胜感激。 非常感谢。

  • Response响应对象主要将JSP容器处理后的结果传回到客户端。可以通过response变量设置HTTP的状态和向客户端发送数据,如Cookie、HTTP文件头信息等。 一个典型的响应看起来就像下面这样: HTTP/1.1 200 OK Content-Type: text/html Header2: ... ... HeaderN: ... (空行) <!doctype ...> <ht

  • 我写了一个JAVA代码,使用Apache Commons Net FTPClient遍历FTP位置,并在Excel文件中获得输出。 我正在使用commons-net-3.0.1。罐子我做了一些测试 并发送,但仍会收到相同的错误。 我要做的就是遍历一个目录,如果找到了文件,就在excel中获取文件名和文件更新日期,如果找到了目录,就进入目录,直到再次找到文件。 请帮助并询问是否需要任何其他信息。我是