V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
NGINX
NGINX Trac
3rd Party Modules
Security Advisories
CHANGES
OpenResty
ngx_lua
Tengine
在线学习资源
NGINX 开发从入门到精通
NGINX Modules
ngx_echo
ddddjent
V2EX  ›  NGINX

Nginx 反代上传大文件时 502

  •  
  •   ddddjent · 196 天前 · 2427 次点击
    这是一个创建于 196 天前的主题,其中的信息可能已经有所发展或是发生改变。

    如题,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 来解决这个问题的方法?

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

    我试试看前端咋操作一下
    wellerman
        11
    wellerman  
       196 天前
    nginx 的 buffer 小了吧
    试试
    client_body_buffer_size 20M;
    cmhu1023
        12
    cmhu1023  
       196 天前
    从经验来看,应该 buffer 小了。设置大点
    zsj1029
        13
    zsj1029  
       196 天前
    采用流式传输,go-gin 的问题,问题不是在 nginx 上感觉
    wushenlun
        14
    wushenlun  
       196 天前 via Android
    gin 发的 fin 或者 rst 导致 ngx502 ,超过 gin 限制了,一般是溢出问题
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1012 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 21ms · UTC 19:51 · PVG 03:51 · LAX 11:51 · JFK 14:51
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.