猿问

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

我有一个设置(微服务),其中 Zuul 网关(localhost)位于使用 uWSGI 服务的 Flask REST API 应用程序(localhost:8080)前面。


当我尝试通过网关访问 API 时(例如curl http://localhost/api/endpoint),所有其他请求都会失败(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


另一个有趣的事情是,如果使用 Flask 的开发服务器而不是 uWSGI,当我尝试通过网关访问 API 时,它会起作用。


这是我的 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.jar和uwsgi==2.0.17.1。


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


知道这里可能有什么问题吗?


小唯快跑啊
浏览 143回答 1
1回答

忽然笑

通过将 NGINX 置于 uWSGI 之上来解决。NGINX 监听端口 8080 并通过 unix 套接字与 uWSGI 对话,因此从 Zuul 的角度来看,没有任何变化。
随时随地看视频慕课网APP

相关分类

Java
我要回答