Ich habe ein Setup mit Apache2 als Front-End-Server für mehrere Python-Apps, die von Gunicorn bereitgestellt werden . Mein Apache2-Setup mit mod_proxy sieht folgendermaßen aus:
<VirtualHost *:80>
ServerName example.com
UseCanonicalName On
ServerAdmin webmaster@localhost
LogLevel warn
CustomLog /var/log/apache2/example.com/access.log combined
ErrorLog /var/log/apache2/example.com/error.log
ServerSignature On
Alias /media/ /home/example/example.com/pysrc/project/media/
ProxyPass /media/ !
ProxyPass / http://127.0.0.1:4711/
ProxyPassReverse / http://127.0.0.1:4711/
ProxyPreserveHost On
ProxyErrorOverride Off
</VirtualHost>
Im Allgemeinen funktioniert dieses Setup ziemlich gut. Ich habe jedoch ein Problem: Wenn ich den Gunicorn-Prozess neu starte (dauert 2-5 Sekunden) und eine Anfrage von Apache vorliegt, schlägt diese Anfrage mit einem 503-Fehler fehl. So weit, ist es gut. Aber Apache gibt immer wieder 503 Fehler zurück, selbst nachdem der Gunicorn-Prozess wieder aufgenommen wurde. Die Bereitstellung von Inhalten vom Proxyserver wird erst nach einem vollständigen Neustart von Apache fortgesetzt.
Gibt es einen Weg, um dieses Verhalten zu umgehen?
quelle
retry
Option wird nicht erwähnt . Für andere, die sich das Gleiche fragen: Der Standardwert für diesen Parameter beträgt 60 Sekunden.Befolgen Sie die dokumentierte Methode zum Neustart von Gunicorn?
Ich würde einen einfachen Ansatz empfehlen. Wenn 2-5 Sekunden in Ihrer Umgebung akzeptable Ausfallzeiten sind, kann ich dann vorschlagen, einfach den Apache-Dienst per Skript zu erstellen, um sofort nach dem Neustart Ihres Gunicorn-Dienstes neu zu starten?
In einer Produktionsumgebung würde ich vorschlagen, HAProxy anstelle von Apache als Front-End zu verwenden, und Sie haben möglicherweise viel besseres Glück.
quelle
supervisor.conf
Grunde dem Beispiel im Gunicorn-Repo . Leider kann ich mich aus organisatorischen Gründen nicht von Apache als Front-End-Server entfernen.