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.
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.
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.
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”.
Odpowiedzi:
To zależy.
Po wyjęciu z pudełka, umieszczenie nginx na początku jako odwrotnego proxy da ci:
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.
źródło
log
pakietu). 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.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.
źródło
Zestaw narzędzi internetowych Gorilla zapewnia:
schema
pakiet konwertuje wartości formularza na strukturę.Wypełnia to dużą lukę między
net/http
serwerami Go i HTTP, takimi jak NGINX.Osobiście unikałbym instalowania i konfigurowania innego serwera HTTP,
net/http
jeśli wiem, że mogę zamiast tego podłączyć CDN.Myślę, że
net/http
ma najpotężniejszy serwer HTTP w każdej standardowej bibliotece.źródło
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ę.
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”.
źródło