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?
Es hängt davon ab, ob.
Wenn Sie Nginx als Reverse-Proxy voranstellen, erhalten Sie sofort:
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.
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.
Das Gorilla Web Toolkit gibt Ihnen:
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.
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."