Ich laufe Tornado hinter Apache. Ich habe Proxy-Server erstellt.
%Vor%Dieser Code funktioniert einwandfrei und gibt alle meine Anfragen an Tornado weiter und gibt die Antwort zurück an den Client.
Jetzt benutze ich Tornado für lange Umfragen. Einige der Anfragen, die in einem kurzen Zeitintervall enden, sagen weniger als 1 Minute, dass dieser Reverse-Proxy in Ordnung ist. Aber bestimmte lange Abfrageanforderungen geben 502 Proxy-Fehler. Der Grund für diesen Proxy-Fehler liegt darin, dass Apache nur eine Minute lang eine Abfrage abhalten kann (standardmäßig). Es schließt die Anfrage und daher wird ein Proxy-Fehler empfangen.
Nun habe ich die Direktive zu
geändert %Vor%d. h. ich habe das Standard-Timeout auf 12000 Sekunden geändert.
Das funktioniert momentan gut für mich. Das ist nicht die beste Lösung für das Problem. Im Idealfall können lange Abfrageanforderungen jedes angegebene Zeitlimit überschreiten. Also meine Fragen sind
Ich hatte ein ähnliches Problem mit Nginx und löste es genauso wie Sie. Aber ich habe das Timeout auf 1 Tag geändert, da es in meinem Fall ausreichend groß war.
Ich denke, du kannst damit nicht aufhören. Der Grund dafür ist, dass Apache (oder ein anderer Proxy-Server) seine Leistung beibehalten muss, was er natürlich nicht kann, wenn er veraltete oder inaktive Verbindungen halten muss. Sie möchten Ihrem Proxy-Server-Proxy mehr aktive Verbindungen als inaktive Verbindungen geben.
Daher gibt es keine Möglichkeit, den ProxyTimeout in Apache oder sogar in Nginx (konfiguriert mit proxy_read_timeout) zu deaktivieren. Wenn also Ihr Proxyserver innerhalb der Zeitüberschreitung keine Antwort sendet, dauert es entweder zu lange, bis der Anwendungsserver reagiert, oder es liegt ein Problem mit dem Anwendungsserver vor, oder der Client fordert keine Antwort an. Im ersten Fall können Sie sichere Schätzungen vornehmen, um eine angemessene Zeitüberschreitung festzulegen. Im zweiten Fall müssen Sie Ihren Anwendungsserver reparieren. Und im dritten Fall müssen Sie die Situation auf dem Client elegant handhaben und bei Bedarf die Verbindung wiederherstellen.
Kommen wir zu Ihrer zweiten Frage, es sollte keinen anderen Unterschied als die Latenz zwischen Ihrem Apache und Ihrem Tornado-Server geben. Sie können Ihren Tornado-Server sehr gut direkt der Welt aussetzen, aber das wird mit einigen Herausforderungen verbunden sein: 1. Mehr Operationen funktionieren - stellen Sie sicher, dass der Tornado-Prozess immer betriebsbereit ist. 2. Proxying und Load Balancing werden schwieriger. 3. Schlimmere Sicherheit, da SIE diesen Code anstelle von Tausenden von Experten geschrieben haben. Sie sollten also nicht daran denken, diesen Server als root auszuführen. Aber Sie können immer noch das gleiche mit Apache oder Nginx machen.
Natürlich sind die obigen Probleme lösbar, aber warum lösen sie ein bereits gelöstes Problem. :)
Tags und Links apache reverse-proxy tornado long-polling