Was sind die Vorteile der Verwendung von Nginx vor einem Webserver für Go? [geschlossen]

84

Ich schreibe einige Webservices, die JSON-Daten zurückgeben, die viele Benutzer haben.

Was sind die Vorteile der Verwendung von Nginx vor meinem Server im Vergleich zur Verwendung des go http-Servers?

Daniele B.
quelle
Zu Ihrer Information, es gab viele TCP-Fehler wie das Zurücksetzen der Verbindung durch einen Peer und E / A-Zeitüberschreitungen beim Verwenden des Go http-Servers für die Bearbeitung von Hunderten großer POST-Anforderungen pro Minute. Stellen Sie Nginx davor - keine Probleme mehr.
Peter Kelly
Schließlich entschied ich mich, Go http Server ohne NGINX zu verwenden, und es funktioniert sehr gut. Ich habe kein Problem gehabt. In meinem Dienst werden jedoch keine großen POST-Anfragen wie in Ihrem Fall ausgeführt.
Daniele B
19
Dies basiert nicht unbedingt auf einer Stellungnahme. Das Schließen als solches zeigt einen schwerwiegenden Mangel an Verständnis für die Überlegungen und Vorbehalte, die eine Antwort auf eine solche Frage ausfüllen und liefern kann. Die ausgewählte Antwort ist ein gutes Beispiel. Tatsächlich sehe ich in allen Antworten relevante neue Überlegungen.
vee_ess

Antworten:

134

Es hängt davon ab, ob.

Wenn Sie Nginx als Reverse-Proxy einsetzen, erhalten Sie sofort Folgendes:

  • Zugriffsprotokolle
  • Fehlerprotokolle
  • Einfache SSL-Beendigung
  • SPDY-Unterstützung
  • gzip Unterstützung
  • Einfache Möglichkeiten, HTTP-Header für bestimmte Routen in mehreren Zeilen festzulegen
  • Sehr schnelles statisches Asset-Serving (wenn Sie S3 / etc. Servieren, ist dies jedoch nicht so relevant)

Der Go - HTTP - Server ist sehr gut, aber Sie werden müssen , das Rad neu zu erfinden einige diese Dinge zu tun (was in Ordnung ist: es ist nicht zu sein , alles zu jedem gemeint).

Ich fand es immer einfacher, Nginx in den Vordergrund zu stellen - was gut ist - und es das "Webserver" -Ding machen zu lassen. Meine Go-Anwendung erledigt die Anwendungen und nur das Nötigste an Headern / etc. dass es muss. Betrachten Sie Nginx nicht als "schlechte" Sache.

Elithrar
quelle
Danke für deine Antwort! - 1) Erzeugt Go HTTP Protokolle? - 2) Reduziert Nginx den Anforderungs- / Antwortdurchsatz irgendwie?
Daniele B
3
@DanieleB Der Go-HTTP-Server erstellt nur die gewünschten Protokolle (dh unter Verwendung des logPakets). Wenn Sie die IP-Adresse, den Ressourcenzugriff usw. protokollieren möchten, müssen Sie diese schreiben. Gleiches gilt für das Setzen von Headern über die Grundlagen hinaus. Obwohl ich keine konkreten Daten habe, sollte Nginx vor Go eigentlich nicht langsamer sein als Go: Tatsächlich kann es dank gzip und seinen eigenen Optimierungen schneller sein. Die "Kosten" werden mehr Speicher- / CPU-Auslastung sein, aber nginx ist auch in dieser Hinsicht sehr effizient.
Elithrar
16
Noch eine große Funktion: Wie werden Sie Ihre App aktualisieren / warten (ohne Pakete zu verwerfen, während sie nicht verfügbar ist)? Mit Nginx können Sie den Verkehr steuern, ohne Pakete zu verlieren.
BraveNewCurrency
+1, Nginx ist an seinem eigenen Platz.
Anatoly
3
Wenn Sie auf meinem Raspberry Pi Nginx vor Go stellen, wird die Ladegeschwindigkeit der Seite erheblich erhöht.
425nesp
17

Der Standard-HTTP-Server von Go ist in Ordnung. Wenn Ihre Anwendung meistens / nur "dynamische" Anfragen / Antworten sind, ist dies wirklich der beste Weg.

Sie könnten nginx verwenden, um statische Assets bereitzustellen, aber höchstwahrscheinlich ist das Standard-Go-One auch dafür in Ordnung. Wenn Sie eine höhere Leistung benötigen, sollten Sie einfach so viel CDN oder Cache wie möglich mit Varnish verwenden (zum Beispiel).

Wenn Sie verschiedene Anwendungen von derselben IP-Adresse aus bedienen müssen, ist nginx eine gute Wahl für einen Proxy, um Anforderungen zwischen den verschiedenen Anwendungen zu verteilen. obwohl ich für so etwas öfter Lack oder HAProxy aus der Toolbox holte.

Fragen Sie Bjørn Hansen
quelle
Ja, ich verwende es eigentlich nur zum Bereitstellen dynamischer Daten. Dann brauche ich wohl kein NGINX! Vielen Dank für Ihre Antwort
Daniele B
Lack / HAProxy sind nicht erforderlich, Nginx verfügt über ein ähnliches Toolset für das Caching und den Lastausgleich.
Anatoly
@mikhailov ist das nicht was ich gesagt habe? Nginx funktioniert gut dafür; obwohl ich persönlich oft Lack oder HAproxy bevorzuge. Ich finde sie einfacher zu konfigurieren und zu bedienen.
Fragen Sie Bjørn Hansen
5

Das Gorilla Web Toolkit bietet Ihnen:

  • Erweitertes Routing (Einschränkung von Domain / Subdomain, Regex-Pfadabgleich).
  • gzip-Unterstützung (über Middleware-Handler )
  • Protokollierung des Middleware-Handlers, der im allgemeinen Apache-Protokollformat ausgegeben wird.
  • Sichere verschlüsselte Cookies.
  • Sitzungen.
  • schema Paket konvertiert Formularwerte in eine Struktur.

Dies füllt eine große Lücke zwischen Go's net/http und HTTP-Servern wie NGINX.

Persönlich würde ich es vermeiden, einen anderen HTTP-Server zusätzlich zu installieren und zu konfigurieren, net/httpwenn ich weiß, dass ich stattdessen ein CDN anschließen kann.

Ich denke, net/httphat den leistungsstärksten HTTP-Server in jeder Standardbibliothek.

Moshe Revah
quelle
2

Unter https://blog.gopheracademy.com/caddy-a-look-inside/ sieht es so aus, als ob Go mit Middleware gzip, Fehler, statische Dateien, Routing und http-Header verarbeiten kann. Die folgende Zeile aus dem Blog zeigt, wie Sie mit einer solchen Anfrage umgehen würden.

logHandler(gzipHandler(fileServer))

Sie behandeln die Fehlerprotokollierung auf sehr interessante Weise. Solange Ihre Middleware einen Fehlercode (int) zurückgibt, wird dieser von der Middleware zur Fehlerbehandlung automatisch verarbeitet. Sie sind sogar so weit gegangen, die gesamte Site in Go wie Nginx zu konfigurieren. "Die Datei nginx.conf für alle Websites der Gopher Academy war über 115 Zeilen lang. Die entsprechende Caddy-Datei umfasst nur 50 Zeilen."

Kevin K.
quelle