首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >nginx -上游读取时连接超时

nginx -上游读取时连接超时
EN

Stack Overflow用户
提问于 2022-08-18 16:18:34
回答 1查看 395关注 0票数 0

我有一个带有和端点的烧瓶服务器,它处理一些上传的.csv文件并返回一个.zip (在JSON中,作为base64字符串),这个过程可能需要长达90秒

我一直在使用gunicorn和nginx为生产做准备,我正在用更小的.csv测试端点,它们处理得很好,几秒钟后我就得到了“get”日志。但是nginx不会将其返回给客户端,最后会超时。我设置了一个更长的故障超时时间为10分钟,客户端将等待10分钟,然后超时。

代理读取超时offered as solution here设置为3600 s。

此外,根据this,代理连接超时设置为75s。

根据this的说法,枪手的超时也是如此。

错误日志上写着:“上游超时连接超时,同时读取上游”,我还看到nginx接收选项请求的例子,以及在POST请求之后(一些CORS奇怪地来自客户端)的例子,其中nginx传递选项请求,但在nginx收到后没有将POST请求传递给gunicorn。

问:我在这里做错了什么?非常感谢

代码语言:javascript
复制
http {
    upstream flask  { 
        server 127.0.0.1:5050 fail_timeout=600; 
    }
    # error log
    # 2022/08/18 14:49:11 [error] 1028#1028: *39 upstream timed out (110: Connection timed out) while reading upstream, ...
    # ...
    server {
        # ...
        location /api/ {
            proxy_pass http://flask/;
            proxy_read_timeout 3600;
            proxy_connect_timeout 75s;
            # ...
        }
    # ...
    }
}

# wsgi.py
from main import app
if __name__ == '__main__':
    app.run()

# flask endpoint
@app.route("/process-csv", methods=['POST'])
def process_csv():
    def wrapped_run_func():
        return blob, export_filename
    # ...
    try:
        blob, export_filename = wrapped_run_func()
        b64_file = base64.b64encode(blob.getvalue()).decode()
        ret = jsonify(file=b64_file, filename=export_filename)
        # return Response(response=ret, status=200, mimetype="application/json")
        print("got blob")
        return ret
    except Exception as e:
        app.logger.exception(f"0: Error processing file: {export_filename}")
        return  Response("Internal server error", status=500)

ps。“从堆栈溢出中获取此错误”您的文章似乎包含未正确格式化为代码的代码。请使用“代码”工具栏按钮或CTRL+K键盘快捷方式按4个空格缩进所有代码。要获得更多编辑帮助,请单击工具栏图标。由于有非常好的格式化代码与语言语法,我很抱歉,我不得不张贴它丑陋

EN

回答 1

Stack Overflow用户

发布于 2022-08-24 09:19:57

遗憾的是我没有得到回应

请参见最后一行的“解决方案”最终实现。

错误原因:我认为问题在于我在wsl1上托管了Nginx服务器

我尝试更新到wsl2,看看是否修复了它,但我需要启用某种“嵌套虚拟化”,因为wsl1已经在VM上运行。

通过更改conf,我得到了一个没有错误记录的点,gunicorn返回了文件,然后它就留在了乙醚中。Nginx从不得到/发送响应。

“解决方案”:我最终更改了客户机、服务器和nginx.conf文件的代码:

服务器保存结果文件,并只返回文件名。

客户端将文件名插入到href中,然后显示一个链接。

单击时,将请求发送到nginx,而nginx只从一个静态文件夹发送文件,而只剩下gunicorn一个人。

我想这是做这件事的最佳方法,尽管它仍然困扰着我,我(当然)找不到错误的原因。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73406437

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档