uWSGI 和 Zuul:所有其他请求都失败

uWSGI and Zuul: every other request fails

我有一个设置(微服务),其中 Zuul 网关(本地主机)位于烧瓶 REST API 应用程序(本地主机:8080)与 uWSGI 一起提供的前面。

当我尝试通过网关(例如curl http://localhost/api/endpoint到达API时,所有其他请求都失败(HTTP 500)。 API 端没有日志,这里是非常密集的网关异常日志的摘录:

com.netflix.zuul.exception.ZuulException: Forwarding error
...
Caused by: com.netflix.client.ClientException: null
...
Caused by: java.lang.RuntimeException: org.apache.http.NoHttpResponseException: localhost:8080 failed to respond

不过,当我直接API(例如 curl http://localhost:8080/api/endpoint).

另一个有趣的事情是当我尝试通过网关到达API时它工作如果使用flask的开发服务器 而不是 uWSGI。

这是我的 uWSGI 设置:

[uwsgi]
wsgi-file = api.py
callable = app
uid = api
gid = api
master = true

processes = 2
threads = 2
http-timeout = 300
socket-timeout = 300
harakiri = 300

http = 0.0.0.0:8080
socket = /tmp/uwsgi.socket
chmod-sock = 664
vacuum = true
die-on-term = true

wsgi-disable-file-wrapper = true

log-date = %%Y-%%m-%%d %%H:%%M:%%S
logformat-strftime = true
logformat = %(ftime) | uWSGI    | %(addr) (%(proto) %(status)) | %(method) %(uri) | %(pid):%(wid) | Returned %(size) bytes in %(msecs) ms to %(uagent)

版本为 spring-cloud-netflix-zuul-2.1.1.RELEASE.jaruwsgi==2.0.17.1

Wireshark 检查显示 TCP 8080 -> 80 [RST] Seq=123 Win=0 Len=0

知道这里的问题是什么吗?

通过将 NGINX 置于 uWSGI 之上解决。

NGINX 侦听端口 8080 并通过 unix 套接字与 uWSGI 对话,所以从 Zuul 的角度来看没有任何改变。