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

J’écris des webservices renvoyant des données JSON, qui ont beaucoup d’utilisateurs.

Quels sont les avantages de l’utilisation de Nginx en face de mon serveur par rapport à l’utilisation du simple serveur http?

Ça dépend.

Hors de la boîte, mettre nginx en avant comme proxy inverse va vous donner:

  • Journaux d’access
  • Journaux d’erreur
  • Terminaison SSL facile
  • Support SPDY
  • support gzip
  • Des moyens simples pour définir des en-têtes HTTP pour certaines routes dans quelques lignes
  • Serveur statique très rapide (si vous offrez S3 / etc, ce n’est pas pertinent)

Le serveur Go HTTP est très bon, mais vous devrez réinventer la roue pour faire certaines de ces choses (ce qui est bien: cela ne veut pas être tout pour tout le monde).

J’ai toujours trouvé plus facile de mettre nginx en tête, ce qui est bien, et de le laisser faire le “serveur web”. L’application My Go fait les choses avec l’application, et seulement le minimum d’en-têtes / etc. qu’il doit Ne regardez pas mettre nginx en avant comme une “mauvaise” chose.

Le serveur http standard de Go va bien. Si votre application est principalement / uniquement des requêtes / réponses “dynamics”, alors c’est vraiment la meilleure façon.

Vous pouvez utiliser nginx pour servir des ressources statiques, mais la version standard de Go est très bien adaptée à cela. Si vous avez besoin de meilleures performances, vous devez simplement utiliser un CDN ou un cache autant que possible avec Varnish (par exemple).

Si vous devez utiliser différentes applications avec la même adresse IP, nginx est un choix judicieux pour un proxy afin de répartir les requêtes entre les différentes applications. bien que je reçoive plus souvent Varnish ou HAProxy de la boîte à outils pour ce genre de chose.

Le toolkit web Gorilla vous donne:

  • Routage avancé (ressortingction de domaine / sous-domaine, correspondance du chemin regex).
  • support gzip (via les gestionnaires de middleware )
  • Gestionnaire de journalisation de journalisation qui génère au format de journal commun Apache.
  • Sécuriser les cookies cryptés.
  • Sessions
  • schema package de schema convertit les valeurs de formulaire en une structure.

Cela comble beaucoup de fossé entre les serveurs net/http et HTTP de Go tels que NGINX.

Personnellement, j’éviterais d’installer et de configurer un autre serveur HTTP sur net/http si je sais que je peux twigr un CDN à la place.

Je pense que net/http possède le serveur HTTP le plus puissant de toute bibliothèque standard.

À partir de https://blog.gopheracademy.com/caddy-a-look-inside/, il semble que Go puisse gérer les fichiers gzip, les erreurs, les fichiers statiques, le routage et les en-têtes http en utilisant Middleware. La ligne ci-dessous, tirée du blog, montre comment gérer une telle demande.

 logHandler(gzipHandler(fileServer)) 

Ils gèrent la journalisation des erreurs de manière très 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 l’ensemble du site dans Go comme le ferait Nginx. “Le fichier nginx.conf pour tous les sites Web de Gopher Academy comportait plus de 115 lignes. Le fichier Caddyfile équivalent ne contient que 50 lignes.”