J'écris certains services Web renvoyant des données JSON, qui ont beaucoup d'utilisateurs.
Quels sont les avantages d'utiliser Nginx devant mon serveur par rapport à l'utilisation du serveur go http?
Ça dépend.
Hors de la boîte, mettre nginx devant comme proxy inverse vous donnera:
Le serveur HTTP Go est très bon, mais vous voudrez devez réinventer la roue pour faire certaines de ces choses (ce qui est bien: ce n'est pas censé être tout pour tout le monde).
J'ai toujours trouvé plus facile de mettre nginx devant - c'est ce qu'il fait bien - et de le laisser faire le "serveur web". Mon application Go fait le truc de l'application, et seulement le strict minimum d'en-têtes/etc. dont il a besoin. Ne regardez pas mettre nginx devant comme une "mauvaise" chose.
Le serveur http standard de Go est très bien. Si votre application est principalement/uniquement des demandes/réponses "dynamiques", alors c'est vraiment le meilleur moyen.
Vous pouvez utiliser nginx pour servir des actifs statiques, mais le Go standard est très bien aussi. Si vous avez besoin de performances supérieures, vous devez simplement utiliser un CDN ou un cache autant que possible avec Varnish (par exemple).
Si vous devez servir différentes applications à partir de la même adresse IP, nginx est un bon choix pour un proxy pour répartir les demandes entre les différentes applications; même si je sortais plus souvent Varnish ou HAProxy de la boîte à outils pour ce genre de choses.
Gorilla web toolkit vous donne:
schema
package convertit les valeurs du formulaire en une structure.Cela remplit beaucoup d'espace entre les serveurs Go net/http
Et HTTP comme NGINX.
Personnellement, j'éviterais d'installer et de configurer un autre serveur HTTP au-dessus de net/http
Si je sais que je peux brancher un CDN à la place.
Je pense que net/http
Possède le serveur HTTP le plus puissant de toute bibliothèque standard.
De https://blog.gopheracademy.com/caddy-a-look-inside/ il semble que Go puisse gérer le gzip, les erreurs, les fichiers statiques, le routage et les en-têtes http à l'aide de Middleware. La ligne ci-dessous, du blog, montre comment vous traiteriez une telle demande.
logHandler(gzipHandler(fileServer))
Ils gèrent la journalisation des erreurs d'une manière vraiment intéressante. Tant que votre middleware renvoie un code d'erreur (int), le middleware de gestion des erreurs le gère automatiquement. Ils sont même allés jusqu'à configurer tout le site dans Go comme le ferait Nginx. "Le fichier nginx.conf de tous les sites Web de la Gopher Academy comptait plus de 115 lignes. L'équivalent Caddyfile ne compte que 50 lignes."