Каковы преимущества использования Nginx перед веб-сервером для Go? [закрыто]


86

Я пишу несколько веб-сервисов, возвращающих данные JSON, у которых много пользователей.

Каковы преимущества использования Nginx перед моим сервером по сравнению с использованием HTTP-сервера go?


fyi, было много ошибок TCP, таких как сброс соединения одноранговым узлом и тайм-ауты ввода-вывода с использованием HTTP-сервера Go для службы, обрабатывающей 100 с больших запросов POST в минуту. Поставьте перед ним nginx - больше никаких проблем.
Питер Келли

В конце концов я решил использовать HTTP-сервер Go без NGINX, и он работает очень хорошо. У меня не было никаких проблем. Но моя служба не выполняет большие запросы POST, как в вашем случае.
Daniele B

20
ЭТО НЕ ОБЯЗАТЕЛЬНО ОСНОВАННОЕ МНЕНИЕ. Его закрытие как таковое показывает серьезное непонимание соображений и предостережений, которые может дать ответ на такой вопрос. Выбранный ответ - отличный пример. Фактически, я вижу соответствующие новые соображения во всех предоставленных ответах.
vee_ess 02

Ответы:


136

Это зависит.

Изначально установка nginx в качестве обратного прокси-сервера даст вам:

  • Журналы доступа
  • Журналы ошибок
  • Простое завершение SSL
  • Поддержка SPDY
  • поддержка gzip
  • Простые способы установить заголовки HTTP для определенных маршрутов в пару строк
  • Очень быстрое обслуживание статических активов (если вы обслуживаете S3 и т. Д., Это не так актуально)

Сервер HTTP Go очень хорошо, но вам будет нужно изобретать колесо , чтобы сделать некоторые из этих вещей (это хорошо: это не значит быть всем для всех).

Мне всегда было проще поставить nginx впереди - в этом он хорош - и позволить ему делать вещи «веб-сервера». Приложение My Go выполняет все функции приложения и только минимум заголовков и т. Д. что ему нужно. Не считайте размещение nginx на переднем плане "плохим".


Спасибо за ваш ответ! - 1) Go HTTP ведет какие-то логи? - 2) снижает ли nginx каким-либо образом пропускную способность запросов / ответов?
Daniele B

3
@DanieleB HTTP-сервер Go создает только те журналы, которые вы хотите (т. Е. Используя logпакет). Если вы хотите регистрировать IP-адрес, доступ к ресурсам и т. Д., Вам нужно это написать. То же самое касается установки заголовков, помимо основ. Хотя у меня нет конкретных данных, nginx перед Go действительно должен быть не медленнее, чем Go: на самом деле он может быть быстрее благодаря gzip и его собственным оптимизациям. «Стоимость» будет заключаться в увеличении использования памяти / ЦП, но nginx также очень эффективен в этом отношении.
elithrar

16
Еще одна важная функция: как вы будете обновлять / поддерживать свое приложение (не отбрасывая пакеты, пока оно не работает)? Nginx позволит вам управлять трафиком без потери пакетов.
BraveNewCurrency

+1, Nginx на своем месте.
Анатолий

3
На моем Raspberry Pi размещение Nginx перед Go значительно увеличило скорость загрузки страницы.
425nesp

17

Стандартный http-сервер Go в порядке. Если ваше приложение в основном / только «динамические» запросы / ответы, то это действительно лучший способ.

Вы можете использовать nginx для обслуживания статических ресурсов, но, скорее всего, стандартный Go тоже подходит для этого. Если вам нужна более высокая производительность, вы должны просто использовать CDN или кеш как можно больше с Varnish (например).

Если вам нужно обслуживать разные приложения с одного и того же IP-адреса, nginx - прекрасный выбор для прокси-сервера для распределения запросов между различными приложениями; хотя я чаще брал Varnish или HAProxy из набора инструментов для такого рода вещей.


да, на самом деле я использую его только для обслуживания динамических данных. Так что, думаю, мне тогда не нужен NGINX! Благодарю за ответ
Daniele B

Varnish / HAProxy не требуются, Nginx имеет аналогичный набор инструментов для кеширования и балансировки нагрузки.
Анатолий

@mikhailov, разве я не это сказал? nginx для этого хорошо работает; хотя лично я часто предпочитаю Varnish или HAproxy. Я считаю, что их проще настроить и использовать.
Спросите Bjørn Hansen

5

Веб - инструментарий Gorilla дает вам:

  • Расширенная маршрутизация (ограничение домена / поддомена, соответствие пути регулярным выражениям).
  • поддержка gzip (через обработчики промежуточного программного обеспечения ).
  • Обработчик промежуточного программного обеспечения ведения журнала, который выводится в формате общего журнала Apache.
  • Безопасные зашифрованные файлы cookie.
  • Сессии.
  • schema пакет преобразует значения формы в структуру.

Это заполняет большой пробел между Go net/httpи HTTP-серверами, такими как NGINX.

Лично я бы не стал устанавливать и настраивать другой HTTP-сервер поверх, net/httpесли знаю, что могу вместо этого подключить CDN.

Думаю, у net/httpнего самый мощный HTTP-сервер из всех стандартных библиотек.


2

Из https://blog.gopheracademy.com/caddy-a-look-inside/ похоже, что Go может обрабатывать gzip, ошибки, статические файлы, маршрутизацию и заголовки http с использованием промежуточного программного обеспечения. В приведенной ниже строке из блога показано, как вы бы обработали такой запрос.

logHandler(gzipHandler(fileServer))

Они действительно интересным образом обрабатывают регистрацию ошибок. Пока ваше промежуточное ПО возвращает код ошибки (int), промежуточное ПО обработки ошибок автоматически обрабатывает его. Они даже дошли до настройки всего сайта на Go, как это сделал бы Nginx. «Файл nginx.conf для всех веб-сайтов Gopher Academy содержит более 115 строк. Эквивалентный файл Caddyfile - всего 50 строк».

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.