nginx und Perl: FastCGI vs reverse-proxy (PSGI/Starman)
Eine sehr beliebte Wahl für die Ausführung von Perl-web-Anwendungen in diesen Tagen zu sein scheint, hinter einem nginx webserver senden von proxyanforderungen zu entweder einer FastCGI-daemon oder ein PSGI-fähigen webserver (z.B. Starman).
Gab es viele Frage auf, warum man es im Allgemeinen (z.B. Warum nginx mit Katalysator/Schwarz/Starman?)
und die Antworten scheinen gelten in beiden Fällen (z.B. zulassen von nginx für die Verarbeitung statischer Inhalte, einfach neu starten von application server, load-balancing, etc).
Aber, ich bin besonders daran interessiert, die Vorteile/Nachteile der Verwendung von FastCGI vs reverse-proxy-Ansatz. Es scheint, dass Starman ist weithin als die Schnellste und beste Perl-PSGI-Anwendung/web-server gibt, und ich bin kämpfen, um alle Vorteile der Verwendung von FastCGI überhaupt. Beide Konzepte scheinen zu unterstützen:
- UNIX-domain-sockets sowie TCP-sockets
- Gabel/Prozess-manager Stil-Server sowie nicht-blockierende event-basiert (z.B. AnyEvent) - Servern.
- Signal-handling/Neustarts
- PSGI
Ähnlich, nginx-Konfiguration für entweder option ist sehr ähnlich.
Also, warum würden Sie wählen einen über den anderen?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Einen reverse-proxy-setup (z.B. nginx Weiterleitung der HTTP-Anfragen zu Starman) hat folgende Vorteile:
Dinge sind ein bisschen einfacher zu Debuggen, da kann man leicht direkt getroffen der back-End-server;
wenn Sie brauchen, um skalieren Sie Ihre back-End-server, können Sie ganz einfach verwenden Sie so etwas wie pound/haproxy zwischen frontend (static-serving) HTTP und Ihre backends (Zope ist Häufig eingesetzt wie dass);
kann es ein netter sidekick, wenn Sie auch mit eine Art von nach außen gerichteten, caching, reverse proxy wie Varnish oder Squid), da es zu umgehen, ist es sehr leicht.
Er hat jedoch die folgenden Nachteile:
backend-server hat, um herauszufinden, die Reale Absender-IP, da alle es sehen werden, ist der frontend-server-Adresse (meist localhost); es ist fast eine einfache Möglichkeit, um herauszufinden, die IP-Adresse des Clients im HTTP-Header, aber das ist etwas extra, um herauszufinden,;
back-End-server in der Regel nicht wissen, die orignal "Host:" - HTTP-header, und somit auch nicht automatisch generiert, eine absolute URL zu einer lokalen Ressource; Zope-Adressen mit spezieller URLs einbetten der original-Protokoll, host und port in der Anfrage an das backend, aber es ist etwas, das Sie nicht haben zu tun mit FastCGI/Schwarz/...;
frontend nicht automatisch erzeugen, backend-Prozesse, wie könnte es mit FastCGI zum Beispiel.
Wählen Sie Ihre Favoriten vor - /Nachteile und treffen Sie Ihre Wahl, denke ich 😉
HTTP gut verstanden wird von den meisten system-Administratoren und es ist einfach zu Debuggen. Es gibt fast immer eine Art von reverse-proxy implementiert sein, so ist es ein Stück Kuchen, fügen Sie einfach eine andere Konfiguration für die Zeilengruppe Ihrer Konfiguration in Ordnung zu bringen-Ihre Anwendung und läuft in ein paar Sekunden. Nie getestet, die Geschwindigkeit differances mit beiden Einstellungen aber auf der anderen Seite hatte ich nie Probleme in diesem Bereich, also es kann nicht so schlimm sein.