首页 文章

在NGINX关闭管道后如何防止Werkzeug崩溃?

提问于
浏览
0

我有一个在NGINX后面运行的Werkzeug服务器 . 当客户端在等待Werkzeug服务器响应时断开连接时,NGINX将管道关闭到Werkzeug . 当python程序将响应写入Werkzeug时,会发生以下异常并且Werkzeug崩溃:

回溯(最近一次调用最后一次):文件“server.py”,第81行,在app.run中(host = args.host,port = args.port,debug = False)文件“/ usr / local / lib / python2 .7 / dist-packages / flask / app.py“,第843行,运行run_simple(host,port,self,** options)文件”/usr/local/lib/python2.7/dist-packages/werkzeug/ service.py“,第694行,在run_simple inner()文件”/usr/local/lib/python2.7/dist-packages/werkzeug/serving.py“,第659行,在内部srv.serve_forever()文件中”/ usr / local / lib / python2.7 / dist-packages / werkzeug / serving.py“,第499行,在serve_forever HTTPServer.serve_forever(self)文件”/usr/lib/python2.7/SocketServer.py“,第238行,在serve_forever self._handle_request_noblock()文件“/usr/lib/python2.7/SocketServer.py”,第297行,在_handle_request_noblock中,self.handle_error(request,client_address)文件“/usr/lib/python2.7/SocketServer . py“,第295行,在_handle_request_noblock中,self.process_request(request,client_address)文件”/usr/lib/python2.7/SocketServer.py“,第321行,在process_request self.finish中_request(request,client_address)文件“/usr/lib/python2.7/SocketServer.py”,第334行,在finish_request self.RequestHandlerClass(request,client_address,self)文件“/usr/lib/python2.7/SocketServer . py“,第651行,在init self.finish()文件”/usr/lib/python2.7/SocketServer.py“,第710行,在完成self.wfile.close()文件”/ usr / lib / python2 . 7 / socket.py“,第279行,关闭self.flush()文件”/usr/lib/python2.7/socket.py“,第303行,刷新self._sock.sendall(view [write_offset:write_offset buffer_size ])socket.error:[Errno 32]管道破裂

我是否缺少一些配置选项以防止崩溃?通常会捕获所有异常并返回500错误,服务器保持活动状态 .

1 回答

  • 0

    据我所知,从调试跟踪和不读取源代码,您可能过早地关闭套接字 .

    您的服务器进程已收到SIGPIPE写入套接字 . 当您在另一个(客户端)端写入完全关闭的套接字时,通常会发生这种情况 . 当客户端程序没有等到收到服务器的所有数据并且只是关闭套接字(使用close函数)时,可能会发生这种情况 . 在C程序中,您通常会尝试设置忽略SIGPIPE信号或为其设置虚拟信号处理程序 . 在这种情况下,写入已关闭的套接字时将返回一个简单的错误 . 在你的情况下,python似乎抛出一个异常,可以作为客户端的过早断开来处理 .

    How to prevent errno 32 broken pipe?

相关问题