Quali sono i vantaggi dell'utilizzo di Nginx davanti a un server web per Go? [chiuso]


86

Sto scrivendo alcuni servizi web che restituiscono dati JSON, che hanno molti utenti.

Quali sono i vantaggi dell'utilizzo di Nginx davanti al mio server rispetto al solo utilizzo del server go http?


Cordiali saluti, ha avuto molti errori tcp come la connessione ripristinata dal peer e i timeout i / o utilizzando il server Go http per il servizio che gestisce centinaia di richieste POST di grandi dimensioni al minuto. Metti nginx davanti ad esso - niente più problemi.
Peter Kelly

Alla fine ho deciso di utilizzare il server Go http, senza NGINX, e funziona molto bene. Non ho riscontrato alcun problema. Ma il mio servizio non esegue richieste POST di grandi dimensioni come nel tuo caso.
Daniele B

20
QUESTO NON È NECESSARIAMENTE BASATO SU OPINIONI. Chiuderlo in quanto tale mostra una grave mancanza di comprensione delle considerazioni e dei caveat che una risposta a tale domanda può completare e fornire. La risposta selezionata è un ottimo esempio. In effetti, vedo nuove considerazioni rilevanti in tutte le risposte fornite.
vee_ess

Risposte:


136

Dipende.

Fuori dagli schemi, mettere nginx davanti come proxy inverso ti darà:

  • Log di accesso
  • Log degli errori
  • Facile terminazione SSL
  • Supporto SPDY
  • supporto gzip
  • Semplici modi per impostare le intestazioni HTTP per determinate rotte in un paio di righe
  • Pubblicazione di risorse statiche molto veloce (se stai servendo da S3 / ecc., Tuttavia, non è così rilevante)

Il server HTTP Go è molto buona, ma si avrà bisogno di reinventare la ruota per fare un po 'di queste cose (che va bene: non è destinata ad essere tutto per tutti).

Ho sempre trovato più facile mettere nginx in primo piano, che è ciò in cui è bravo, e lasciargli fare le cose del "server web". L'applicazione My Go fa le cose dell'applicazione e solo il minimo indispensabile di intestazioni / ecc. di cui ha bisogno. Non guardare a mettere nginx davanti come una cosa "cattiva".


grazie per la tua risposta! - 1) Go HTTP produce qualche tipo di log? - 2) nginx riduce in qualche modo il throughput di richieste / risposte?
Daniele B

3
@DanieleB Il server Go HTTP produce solo i log che desideri (cioè utilizzando il logpacchetto). Se vuoi registrare l'indirizzo IP, l'accesso alle risorse, ecc., Dovrai scriverlo. Lo stesso vale per l'impostazione delle intestazioni, oltre le basi. Sebbene non disponga di dati concreti, nginx davanti a Go non dovrebbe essere più lento di Go: infatti potrebbe essere più veloce grazie a gzip e alle sue stesse ottimizzazioni. Il "costo" sarà un maggiore utilizzo di memoria / CPU, ma nginx è molto efficiente anche su questo fronte.
elithrar

16
Un'altra grande caratteristica: come aggiornerete / manterrete la vostra app (senza rilasciare pacchetti mentre è inattiva)? Nginx ti consentirà di indirizzare il traffico senza perdere pacchetti.
BraveNewCurrency

+1, Nginx è al suo posto.
Anatoly

3
Sul mio Raspberry Pi, mettere Nginx davanti a Go ha aumentato significativamente la velocità di caricamento della pagina.
425nesp

17

Il server http standard di Go va bene. Se le tue applicazioni sono principalmente / solo richieste / risposte "dinamiche", allora è davvero il modo migliore.

Potresti usare nginx per servire asset statici, ma molto probabilmente lo standard Go va bene anche per quello. Se hai bisogno di prestazioni più elevate, dovresti semplicemente usare un CDN o una cache il più possibile con Varnish (ad esempio).

Se è necessario servire diverse applicazioni dallo stesso indirizzo IP, nginx è un'ottima scelta per un proxy per distribuire le richieste tra le diverse applicazioni; anche se più spesso tolgo Varnish o HAProxy dalla cassetta degli attrezzi per quel genere di cose.


sì, in realtà lo sto utilizzando solo per fornire dati dinamici. Quindi, immagino di non aver bisogno di NGINX allora! Grazie per la risposta
Daniele B

Varnish / HAProxy non sono necessari, Nginx ha un set di strumenti simile per la memorizzazione nella cache e il bilanciamento del carico.
Anatoly

@mikhailov non è quello che ho detto? nginx funziona bene per questo; anche se personalmente preferisco spesso Varnish o HAproxy. Li trovo più facili da configurare e utilizzare.
Chiedi a Bjørn Hansen il

5

Il toolkit web Gorilla ti offre:

  • Routing avanzato (restrizione di dominio / sottodominio, corrispondenza del percorso regex).
  • supporto gzip (tramite gestori middleware .)
  • Gestore del middleware di registrazione che restituisce il formato di registro comune di Apache.
  • Cookie crittografati sicuri.
  • Sessioni.
  • schema pacchetto converte i valori del modulo in una struttura.

Questo colma molte lacune tra net/httpi server Go e HTTP come NGINX.

Personalmente, eviterei di installare e configurare un altro server HTTP net/httpse so che posso invece collegare un CDN.

Penso che net/httpabbia il server HTTP più potente in qualsiasi libreria standard.


2

Da https://blog.gopheracademy.com/caddy-a-look-inside/ sembra che Go possa gestire gzip, errori, file statici, routing e intestazioni http utilizzando il middleware. La riga sotto, dal blog, mostra come gestireste una tale richiesta.

logHandler(gzipHandler(fileServer))

Gestiscono la registrazione degli errori in un modo davvero interessante. Finché il middleware restituisce un codice di errore (int), il middleware di gestione degli errori lo gestisce automaticamente. Sono persino arrivati ​​al punto di configurare l'intero sito in Go come farebbe Nginx. "Il file nginx.conf per tutti i siti web della Gopher Academy era lungo più di 115 righe. Il Caddyfile equivalente è di sole 50 righe."

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.