web-dev-qa-db-de.com

Was sind die Vorteile von Nginx vor einem Webserver für Go?

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?

76
Daniele B

Es hängt davon ab, ob.

Wenn Sie Nginx als Reverse-Proxy voranstellen, erhalten Sie sofort:

  • Zugriff auf Protokolle
  • Fehlerprotokolle
  • Einfache SSL-Kündigung
  • SPDY-Unterstützung
  • gzip-Unterstützung
  • Einfache Möglichkeiten zum Festlegen von HTTP-Headern für bestimmte Routen in wenigen Zeilen
  • Sehr schnelles Bereitstellen statischer Assets (wenn Sie nicht über S3/etc. Bereitstellen, ist dies jedoch nicht relevant)

Der Go HTTP-Server ist sehr gut, aber Sie müssen das Rad neu erfinden, um einige dieser Dinge zu tun (was in Ordnung ist: Es ist nicht vorgesehen, dass es ist alles für alle).

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

126
elithrar

Der Standard-HTTP-Server von Go ist in Ordnung. Wenn es sich bei Ihrer Anwendung hauptsächlich um "dynamische" Anfragen/Antworten handelt, ist dies der beste Weg.

Sie könnten Nginx verwenden, um statische Assets bereitzustellen, aber wahrscheinlich ist auch das standardmäßige Go one dafür geeignet. Wenn Sie eine höhere Leistung benötigen, sollten Sie nur ein CDN oder einen Cache verwenden, so oft Sie können (zum Beispiel) mit Varnish.

Wenn Sie verschiedene Anwendungen über dieselbe IP-Adresse bedienen müssen, ist nginx eine gute Wahl für einen Proxy, um Anforderungen zwischen den verschiedenen Anwendungen zu verteilen. obwohl ich für solche Dinge öfter Lack oder HAProxy aus dem Werkzeugkasten holte.

17

Das Gorilla Web Toolkit gibt Ihnen:

  • Erweitertes Routing (Domain-/Subdomain-Einschränkung, Regex-Pfadabgleich).
  • gZIP-Unterstützung (über Middleware-Handler .)
  • Protokollierungs-Middleware-Handler, der im Apache Common Log Format ausgibt.
  • Sichere verschlüsselte Cookies.
  • Sitzungen.
  • Das Paket schema 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 über net/http Zu installieren und zu konfigurieren, wenn ich weiß, dass ich stattdessen einen CDN anschließen kann.

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

5
Moshe Revah

Aus https://blog.gopheracademy.com/caddy-a-look-inside/ geht hervor, dass Go mit Middleware mit gzip, Fehlern, statischen Dateien, Routing und http-Headern umgehen 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 eine wirklich interessante Art und Weise. Solange Ihre Middleware einen Fehlercode (int) zurückgibt, behandelt die fehlerbehandelnde Middleware diesen automatisch. Sie sind sogar so weit gegangen, die gesamte Site in Go so zu konfigurieren, wie es Nginx tun würde. "Die Datei nginx.conf für alle Websites der Gopher Academy war mehr als 115 Zeilen lang. Das entsprechende Caddyfile enthält nur 50 Zeilen."

2
Kevin K