使用ngxin反向代理到webman服务的8787端口,webman提供了一个下载功能,使用的response()->download()方法下载大小超过2M的文件,16个进程,前端使用window.open()打开该链接下载文件,会间歇性出现下载失败的问题,大多数时候可以,但是不稳定,不时出现下载失败的情况。
这个下载服务是收费的必须要稳定运行才行吖请大佬们帮忙看看是么子问题,跪谢。
nginx代理配置:
CleanShot 2022-10-21 at 18.14.35@2x.png
webman代码:
CleanShot 2022-10-21 at 18.22.34@2x.png
前端:
下载的其实是同一个文件,间歇性失败
CleanShot 2022-10-21 at 18.24.01@2x.png
nginx错误日志:
CleanShot 2022-10-21 at 18.27.55@2x.png
日志中的crit日志下载成功也会产生,error日志只有下载失败时产生
macOS 13
webman 1.4
事情是这样的,虽然有个缓存目录无权限报错,但我测试了一下大概和这茬没啥关系= =
主要还是代理缓存大小的问题,我在nginx中使用如下配置解决了问题
proxy_buffering on;
proxy_buffer_size 500M;
proxy_buffers 4 500M;
proxy_busy_buffers_size 500M;
proxy_temp_file_write_size 500M;
个人猜测问题是这样产生的,nginx反向代理到webman,因为代理的是本地端口,所以webman很快就把所有的内容都交付给了nginx了并断开了和nginx的连接;但是nginx默认的代理缓存很小,只保存了webman交付内容的很少一部分,然后就被webman断开了连接,nginx无法获取到剩下的内容,因此报了[上游链接过早断开]的错误,这里我把代理缓存加到500M就可以了,具体加到多少根据实际需求调节,我这里是需要测试一个400多M的压缩包
webman debug方式运行看下,可能报错了
= =就是在debug模式下运行的,然而在命令行中也没有报错,在webman的运行日志中也一切正常= =,我怀疑是download方法大于2m的文件异步加载导致的这个问题,不确定
不走nginx,直接用8787端口下载看看有没问题
直接走8787端口没问题
我测试了一下,基本可以确定就是nginx代理的问题,直接访问8787端口完全没问题,走nginx代理就很容易复现这个问题
二者之间通讯问题
谢谢大佬,搞定了,文章已更新,共勉
nginx配置,if判断那里加上
client_max_body_size 200M;
试试。谢谢大佬,搞定了,文章已更新,共勉
nginx 配置代理使用长链接,估计是有超时问题
谢谢大佬,搞定了,文章已更新,共勉
nginx server 里面加上 proxy_set_header connection keep-alive
谢谢大佬,搞定了,文章已更新,共勉