Ich habe einen Werkzeug Server hinter NGINX laufen. Wenn ein Client die Verbindung unterbricht, während er darauf wartet, dass der Werkzeug-Server antwortet, schließt NGINX die Pipe an Werkzeug. Wenn das Python-Programm die Antwort auf Werkzeug schreibt, tritt die folgende Ausnahme und Werkzeug stürzt:Wie verhindere ich, dass Werkzeug abstürzt, nachdem NGINX das Rohr geschlossen hat?
Traceback (most recent call last):
File "server.py", line 81, in
app.run(host=args.host, port=args.port, debug=False)
File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 843, in run
run_simple(host, port, self, **options)
File "/usr/local/lib/python2.7/dist-packages/werkzeug/serving.py", line 694, in run_simple
inner()
File "/usr/local/lib/python2.7/dist-packages/werkzeug/serving.py", line 659, in inner
srv.serve_forever()
File "/usr/local/lib/python2.7/dist-packages/werkzeug/serving.py", line 499, in serve_forever
HTTPServer.serve_forever(self)
File "/usr/lib/python2.7/SocketServer.py", line 238, in serve_forever
self._handle_request_noblock()
File "/usr/lib/python2.7/SocketServer.py", line 297, in _handle_request_noblock
self.handle_error(request, client_address)
File "/usr/lib/python2.7/SocketServer.py", line 295, in _handle_request_noblock
self.process_request(request, client_address)
File "/usr/lib/python2.7/SocketServer.py", line 321, in process_request
self.finish_request(request, client_address)
File "/usr/lib/python2.7/SocketServer.py", line 334, in finish_request
self.RequestHandlerClass(request, client_address, self)
File "/usr/lib/python2.7/SocketServer.py", line 651, in init
self.finish()
File "/usr/lib/python2.7/SocketServer.py", line 710, in finish
self.wfile.close()
File "/usr/lib/python2.7/socket.py", line 279, in close
self.flush()
File "/usr/lib/python2.7/socket.py", line 303, in flush
self._sock.sendall(view[write_offset:write_offset+buffer_size])
socket.error: [Errno 32] Broken pipe
Gibt es eine Konfigurationsoption ich vermisst habe, damit er nicht abstürzt? Normalerweise werden alle Ausnahmen abgefangen und ein Fehler von 500 zurückgegeben, wobei der Server am Leben bleibt.
Nginx schließt die Buchse, wenn der Client die Verbindung trennt. Wenn python die Antwort schreibt, tritt der Fehler auf, und werkzeug fängt ihn nicht ab. – Alexandre