Issue with nginx (readv() failed
2018-04-23 本文已影响0人
老牛哥儿
问题现象:正常使用过程中(不清楚是否运维进行了操作),突然API不能访问了,客户端错误如下:
java.io.IOException: unexpected end of stream on okhttp3.Address@178de5cc!
查看NGINX的错误日志发现大量的错误日志:
[error] 9932#0: *10366 readv() failed (104: Connection reset by peer) while reading upstream ....
第一感觉是后端upstream集群出现故障,但是经过测试没有发现问题,直接使用curl也能正常访问。问题发生的莫名其妙。
通过查找搜索发现:默认http_version是1.0,http1.0对keepalive是不支持的,所以导致了此问题。
反向代理配置这里不展开,参考2中重点提到一句:
Be extra sure to include proxy_http_version 1.1 or the web socket connection will fail.
对比自己的NGINX配置,确实少了此配置项。
对任何东西没有十足的把握都是有风险的。
参考:
1. [官网] http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_http_version
2. https://discourse.octoprint.org/t/reverse-proxy-configuration-examples/1107
3. https://www.jianshu.com/p/dea2ffb1c3b1