Jakie są korzyści z używania Nginx przed serwerem WWW dla Go? [Zamknięte]

84

Piszę kilka usług sieciowych zwracających dane JSON, które mają wielu użytkowników.

Jakie są zalety używania Nginx przed moim serwerem w porównaniu z samym używaniem serwera go http?

Daniele B
źródło
fyi, miał wiele błędów tcp, takich jak resetowanie połączenia przez peera i limity czasu wejścia / wyjścia przy użyciu serwera Go http do obsługi setek dużych żądań POST na minutę. Umieść nginx przed nim - koniec problemów.
Peter Kelly,
Ostatecznie zdecydowałem się użyć serwera Go http bez NGINX i działa bardzo dobrze. Nie miałem żadnego problemu. Ale moja usługa nie obsługuje dużych żądań POST, jak w twoim przypadku.
Daniele B
20
NIE JEST TO KONIECZNIE OPINIE OPINII. Zamknięcie go jako takiego wskazuje na poważny brak zrozumienia rozważań i zastrzeżeń, jakie może wypełnić i dostarczyć odpowiedź na takie pytanie. Wybrana odpowiedź jest świetnym przykładem. W rzeczywistości we wszystkich udzielonych odpowiedziach widzę nowe, istotne kwestie.
vee_ess

Odpowiedzi:

135

To zależy.

Po wyjęciu z pudełka, umieszczenie nginx na początku jako odwrotnego proxy da ci:

  • Dostęp do dzienników
  • Dzienniki błędów
  • Łatwe zakończenie SSL
  • Wsparcie SPDY
  • obsługa gzip
  • Łatwe sposoby ustawiania nagłówków HTTP dla niektórych tras w kilku wierszach
  • Bardzo szybkie wyświetlanie zasobów statycznych (jeśli obsługujesz poza S3 / itp., To nie jest takie istotne)

Serwer Go HTTP jest bardzo dobre, ale będzie trzeba wyważać otwartych drzwi, aby zrobić niektóre z tych rzeczy (co jest w porządku: to nie miało być wszystkim dla wszystkich).

Zawsze łatwiej było umieścić nginx na pierwszym miejscu - w czym jest dobry - i pozwolić mu zająć się „serwerem sieciowym”. Moja aplikacja Go zajmuje się aplikacjami i tylko minimum nagłówków / itp. że to musi. Nie traktuj nginx na pierwszym miejscu jako „złej” rzeczy.

elithrar
źródło
dzięki za odpowiedź! - 1) czy Go HTTP tworzy jakieś logi? - 2) Czy nginx zmniejsza w jakiś sposób przepustowość żądania / odpowiedzi?
Daniele B,
3
@DanieleB Serwer Go HTTP tworzy tylko te dzienniki, które chcesz (tzn. Używając logpakietu). Jeśli chcesz rejestrować adres IP, dostęp do zasobów itp., Musisz to napisać. To samo dotyczy ustawiania nagłówków, poza podstawami. Chociaż nie mam żadnych konkretnych danych, nginx przed Go naprawdę nie powinien być wolniejszy niż Go: w rzeczywistości może być szybszy dzięki gzipowi i własnym optymalizacjom. „Koszt” będzie oznaczał większe wykorzystanie pamięci / procesora, ale nginx jest również bardzo wydajny na tym froncie.
elithrar
16
Jeszcze jedna ważna funkcja: w jaki sposób zaktualizujesz / utrzymasz swoją aplikację (bez upuszczania pakietów, gdy jest wyłączona)? Nginx pozwoli Ci sterować ruchem bez utraty pakietów.
BraveNewCurrency
+1, Nginx jest na swoim miejscu.
Anatoly
3
Na moim Raspberry Pi umieszczenie Nginx przed Go znacznie zwiększyło prędkość ładowania strony.
425 pn
17

Standardowy serwer http Go jest w porządku. Jeśli twoja aplikacja to głównie / tylko "dynamiczne" żądania / odpowiedzi, to jest to naprawdę najlepszy sposób.

Możesz użyć nginx do obsługi statycznych zasobów, ale najprawdopodobniej standardowy Go też się do tego nadaje. Jeśli potrzebujesz większej wydajności, powinieneś po prostu użyć CDN lub pamięci podręcznej tak często, jak to możliwe z Varnish (na przykład).

Jeśli chcesz obsługiwać różne aplikacje z tego samego adresu IP, nginx jest dobrym wyborem dla serwera proxy do dystrybucji żądań między różnymi aplikacjami; chociaż częściej wyciągałem Varnish lub HAProxy z zestawu narzędzi do tego typu rzeczy.

Zapytaj Bjørna Hansena
źródło
tak, właściwie używam go tylko do obsługi danych dynamicznych. Więc chyba nie potrzebuję NGINX! Dziękuję za odpowiedź
Daniele B
Lakiery / HAProxy nie są wymagane, Nginx ma podobny zestaw narzędzi do buforowania i równoważenia obciążenia.
Anatoly
@mikhailov, czy to nie to, co powiedziałem? nginx dobrze się do tego nadaje; choć osobiście często wolę Varnish lub HAproxy. Uważam, że są łatwiejsze w konfiguracji i obsłudze.
Zapytaj Bjørna Hansena
5

Zestaw narzędzi internetowych Gorilla zapewnia:

  • Zaawansowany routing (ograniczenie domeny / subdomeny, dopasowanie ścieżki wyrażenia regularnego).
  • obsługa gzip (za pośrednictwem programów obsługi oprogramowania pośredniego ).
  • Rejestrowanie programu obsługi oprogramowania pośredniego, który wysyła dane w formacie Apache Common Log Format.
  • Bezpieczne zaszyfrowane pliki cookie.
  • Sesje.
  • schema pakiet konwertuje wartości formularza na strukturę.

Wypełnia to dużą lukę między net/httpserwerami Go i HTTP, takimi jak NGINX.

Osobiście unikałbym instalowania i konfigurowania innego serwera HTTP, net/httpjeśli wiem, że mogę zamiast tego podłączyć CDN.

Myślę, że net/httpma najpotężniejszy serwer HTTP w każdej standardowej bibliotece.

Moshe Revah
źródło
2

Z https://blog.gopheracademy.com/caddy-a-look-inside/ wygląda na to, że Go może obsłużyć gzip, błędy, pliki statyczne, routing i nagłówki http przy użyciu oprogramowania pośredniego. Poniższy wiersz z bloga pokazuje, jak byś obsłużył taką prośbę.

logHandler(gzipHandler(fileServer))

W naprawdę ciekawy sposób radzą sobie z błędami logowania. Tak długo, jak oprogramowanie pośredniczące zwraca kod błędu (int), oprogramowanie pośredniczące do obsługi błędów obsługuje go automatycznie. Posunęli się nawet do skonfigurowania całej witryny w Go, tak jak zrobiłby to Nginx. „Plik nginx.conf dla wszystkich stron internetowych Akademii Gopher miał ponad 115 linii. Odpowiedni plik Caddyfile ma tylko 50 linii”.

Kevin K.
źródło