web-dev-qa-db-fra.com

Quels sont les avantages d'utiliser Nginx devant un serveur Web pour Go?

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?

76
Daniele B

Ça dépend.

Hors de la boîte, mettre nginx devant comme proxy inverse vous donnera:

  • Journaux d'accès
  • Journaux d'erreurs
  • Terminaison SSL facile
  • Prise en charge SPDY
  • support gzip
  • Façons simples de définir des en-têtes HTTP pour certaines routes en quelques lignes
  • Service d'actifs statiques très rapide (si vous ne travaillez pas sur S3/etc., ce n'est pas si pertinent)

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.

126
elithrar

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.

17
Ask Bjørn Hansen

Gorilla web toolkit vous donne:

  • Routage avancé (restriction de domaine/sous-domaine, correspondance de chemin d'expression régulière).
  • prise en charge de gzip (via gestionnaires de middleware .)
  • Gestionnaire d'intergiciel de journalisation qui génère des résultats au format Apache Common Log Format.
  • Cookies cryptés sécurisés.
  • Sessions.
  • 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.

5
Moshe Revah

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."

2
Kevin K