Frage nginx und Perl: FastCGI vs Reverse-Proxy (PSGI / Starman)


Eine sehr beliebte Wahl für die Ausführung von Perl-Webanwendungen scheint heutzutage hinter einem nginx-Webserver zu liegen, der Anfragen an einen FastCGI-Daemon oder einen PSGI-fähigen Webserver (z. B. Starman) weiterleitet.

Es gab viele Fragen, warum man dies im Allgemeinen tun würde (z.B. Warum nginx mit Catalyst / Plack / Starman verwenden?) und die Antworten scheinen in beiden Fällen zu gelten (z. B. kann nginx statischen Inhalt bereitstellen, einfacher Neustart des Anwendungsservers, Lastenausgleich usw.).

Ich interessiere mich jedoch speziell für die Vor- / Nachteile der Verwendung von FastCGI gegenüber einem Reverse-Proxy-Ansatz. Es scheint, dass Starman weithin als der schnellste und beste Perl PSGI-Anwendung / Web-Server da draußen betrachtet wird, und ich habe Schwierigkeiten, irgendwelche Vorteile zu sehen, FastCGI überhaupt zu verwenden. Beide Ansätze scheinen zu unterstützen:

  • UNIX-Domain-Sockets sowie TCP-Sockets
  • fork / process manager style Server sowie nicht blockierende ereignisbasierte (z. B. AnyEvent) Server.
  • Signalbehandlung / anmutiger Neustart
  • PSGI

In ähnlicher Weise ist die nginx-Konfiguration für beide Optionen sehr ähnlich.

Also warum würdest du eins über das andere wählen?


19
2017-10-23 11:20


Ursprung


Antworten:


Ein Reverse-Proxy-Setup (z. B. nginx Weiterleiten von HTTP-Anfragen an Starman) hat die folgenden Vorteile:

  • Dinge sind ein bisschen einfacher zu debuggen, da Sie leicht direkt den Backend-Server treffen können;

  • Wenn Sie Ihren Backend-Server skalieren müssen, können Sie leicht zwischen dem Frontend-HTTP (static-serving) und Ihren Backends (wie z. B. Zope) so etwas wie pound / haproxy verwenden.

  • es kann ein netter Kumpel sein, wenn Sie auch eine Art von nach außen gerichteten, Caching-, Reverse-Proxy (wie Varnish oder Squid) verwenden, da es sehr einfach umgangen werden kann.

Es hat jedoch die folgenden Nachteile:

  • der Backend-Server muss die echte Ursprungs-IP herausfinden, da alles, was er sieht, die Frontend-Server-Adresse ist (im Allgemeinen localhost); Es gibt fast eine einfache Möglichkeit, die Client-IP-Adresse in den HTTP-Headern zu finden, aber das ist etwas extra, um herauszufinden;

  • Der Back-End-Server kennt den ursprünglichen HTTP-Header "Host" nicht und kann daher nicht automatisch eine absolute URL für eine lokale Ressource generieren. Zope adressiert dies mit speziellen URLs, um das ursprüngliche Protokoll, den Host und den Port in der Anfrage in das Backend einzubetten, aber das ist etwas, was Sie nicht mit FastCGI / Plack / ... tun müssen;

  • Das Frontend kann Backend-Prozesse nicht automatisch erzeugen, wie es beispielsweise mit FastCGI möglich wäre.

Wählen Sie Ihre Favoriten Pro / Contra und treffen Sie Ihre Wahl, denke ich ;-)


15
2018-03-04 23:34



HTTP wird von den meisten Systemadministratoren gut verstanden und ist leicht zu debuggen. Es gibt fast immer eine Art Reverse-Proxy, der bereits implementiert ist. Es ist daher ein Kinderspiel, einfach eine Konfigurationszeile in die Konfiguration einzufügen, um die Anwendung in wenigen Sekunden zum Laufen zu bringen. Habe die Geschwindigkeitsunterschiede nie mit beiden Einstellungen getestet, aber auf der anderen Seite hatte ich nie Probleme in diesem Bereich, also kann es nicht so schlimm sein.


0
2017-12-17 11:31