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?
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?
Risposte:
Dipende.
Fuori dagli schemi, mettere nginx davanti come proxy inverso ti darà:
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".
log
pacchetto). 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.
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.
Il toolkit web Gorilla ti offre:
schema
pacchetto converte i valori del modulo in una struttura.Questo colma molte lacune tra net/http
i server Go e HTTP come NGINX.
Personalmente, eviterei di installare e configurare un altro server HTTP net/http
se so che posso invece collegare un CDN.
Penso che net/http
abbia il server HTTP più potente in qualsiasi libreria standard.
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."