nginx报错 sendfile() failed (32: Broken pipe) while sending request to upstream

经验分享
183 0

最新发现了一个新的开源项目nsfw_sherl,但是部署的过程中发生了一些问题。

首先是在我家的N5105的机器上无法启动,一启动就结束了,并且没有啥报错。看了源码之后,发现被作者的README给坑了。作者写的HTTP接口需要设置环境变量APP_ENV=http,但其实作者在代码中写的却是web

不仅如此,在我改完环境变量之后,服务器还是无法启动。查看了相关依赖之后,我猜测是因为tensorflow需要CPU支持AVX2的指令集,而N5105并没有(刚出的N100加了,很纠结要不要换)。

在我换成云服务器之后,项目终于正常跑起来了。好在国内的服务器不会收取下行的费用,不然真的花不起啊。也就在我测试评分的时候,突然发现,有的图给不出来,接口返回500(服务器内部错误)。

诡异的是,docker这边并没有任何报错。而在nginx的错误日志中却找到了下面的提示信息。

sendfile() failed (32: Broken pipe) while sending request to upstream

在我进行了多次尝试之后,错误信息竟然还变了。

writev() failed (32: Broken pipe) while sending request to upstream

作为从来没有出现过的问题,我明显慌了,于是在百度上包括相关仓库的issue中都找了一遍,但是并没有找到解决方案。大部分都是让更改nginx的设置client_max_body_size,但是1panel默认提供的50M已经远远大于图片的大小了。

在经过一晚的折腾之后,我把方向瞄准了很少次见到的413错误。

HTTP/1.1 413 Request Entity Too Large

既然nginx这边设置的body大小没有什么问题,那有没有可能是程序这边的问题呢,毕竟错误描述的是给上游请求的时候报错了。

于是在我更改了fiber(程序所用的web框架)的body_limit之后,大图终于跑通了。

最后更新 2024-03-04
评论 ( 0 )
OωO
隐私评论