Nginx 反代上传大文件时 502

2024-06-04 10:29:58 +08:00
 ddddjent

如题,log: 2024/06/04 02:11:30 [error] 29#29: *2 writev() failed (104: Connection reset by peer) while sending request to upstream

现在发现好像是用 go-gin 作为后端在读到 header 里的 authorization 不对时就直接返回错误,导致 nginx 在文件 body 还没有上传完时就结束连接,返回 502 ,而不是 401

我目前的办法是强制要求后端读完 body,但是这样可能很慢,各位大佬有无直接配置 nginx 来解决这个问题的方法?

2864 次点击
所在节点    NGINX
14 条回复
Red998
2024-06-04 10:32:17 +08:00
大文件、断点续传? oss 一般都有方案吧
ayelky
2024-06-04 10:49:13 +08:00
超时了吧,设置超时时间长一些不就可以了
ddddjent
2024-06-04 10:56:09 +08:00
@ayelky 不是吧 我感觉好像是服务器返回 401 太快了 设个长点的延迟反而就好了
ChovyChu
2024-06-04 10:58:18 +08:00
盲猜跟 authorization 的校验有时效性有关
shinession
2024-06-04 12:14:57 +08:00
client_max_body_size 512M;
OP 查下这个参数用法, 可以解决上传文件大小问题
ddddjent
2024-06-04 12:49:24 +08:00
@shinession 我试了一下,这个是 client 给 nginx post 的 body 限制,好像不能解决 nginx 给上游反代服务器的问题
whileFalse
2024-06-04 12:53:20 +08:00
你的意思是这玩意本来就应该报错,只是期望报错 401 实际报错 502 ?
感觉不是大问题,让前端 handle 一下好了。
另外要谨慎使用直接向网站上传大型文件的行为
shinession
2024-06-04 12:56:52 +08:00
@ddddjent #6 上游的 nginx 设置这个参数?
ddddjent
2024-06-04 13:06:35 +08:00
@shinession 上游是 gin ,不是 nginx ,设置不了
ddddjent
2024-06-04 13:10:40 +08:00
@whileFalse 不好意思,我可能说的不是很清楚,我这里的大文件指的是图像数据,大概几 M 左右

我试试看前端咋操作一下
wellerman
2024-06-04 14:01:55 +08:00
nginx 的 buffer 小了吧
试试
client_body_buffer_size 20M;
cmhu1023
2024-06-04 15:29:21 +08:00
从经验来看,应该 buffer 小了。设置大点
zsj1029
2024-06-04 15:31:03 +08:00
采用流式传输,go-gin 的问题,问题不是在 nginx 上感觉
wushenlun
2024-06-04 16:01:05 +08:00
gin 发的 fin 或者 rst 导致 ngx502 ,超过 gin 限制了,一般是溢出问题

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1046608

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX