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. Я считаю, что их проще настроить и использовать.
Из https://blog.gopheracademy.com/caddy-a-look-inside/ похоже, что Go может обрабатывать gzip, ошибки, статические файлы, маршрутизацию и заголовки http с использованием промежуточного программного обеспечения. В приведенной ниже строке из блога показано, как вы бы обработали такой запрос.
logHandler(gzipHandler(fileServer))
Они действительно интересным образом обрабатывают регистрацию ошибок. Пока ваше промежуточное ПО возвращает код ошибки (int), промежуточное ПО обработки ошибок автоматически обрабатывает его. Они даже дошли до настройки всего сайта на Go, как это сделал бы Nginx. «Файл nginx.conf для всех веб-сайтов Gopher Academy содержит более 115 строк. Эквивалентный файл Caddyfile - всего 50 строк».
Ответы:
Это зависит.
Изначально установка nginx в качестве обратного прокси-сервера даст вам:
Сервер HTTP Go очень хорошо, но вам будет нужно изобретать колесо , чтобы сделать некоторые из этих вещей (это хорошо: это не значит быть всем для всех).
Мне всегда было проще поставить nginx впереди - в этом он хорош - и позволить ему делать вещи «веб-сервера». Приложение My Go выполняет все функции приложения и только минимум заголовков и т. Д. что ему нужно. Не считайте размещение nginx на переднем плане "плохим".
источник
log
пакет). Если вы хотите регистрировать IP-адрес, доступ к ресурсам и т. Д., Вам нужно это написать. То же самое касается установки заголовков, помимо основ. Хотя у меня нет конкретных данных, nginx перед Go действительно должен быть не медленнее, чем Go: на самом деле он может быть быстрее благодаря gzip и его собственным оптимизациям. «Стоимость» будет заключаться в увеличении использования памяти / ЦП, но nginx также очень эффективен в этом отношении.Стандартный http-сервер Go в порядке. Если ваше приложение в основном / только «динамические» запросы / ответы, то это действительно лучший способ.
Вы можете использовать nginx для обслуживания статических ресурсов, но, скорее всего, стандартный Go тоже подходит для этого. Если вам нужна более высокая производительность, вы должны просто использовать CDN или кеш как можно больше с Varnish (например).
Если вам нужно обслуживать разные приложения с одного и того же IP-адреса, nginx - прекрасный выбор для прокси-сервера для распределения запросов между различными приложениями; хотя я чаще брал Varnish или HAProxy из набора инструментов для такого рода вещей.
источник
Веб - инструментарий Gorilla дает вам:
schema
пакет преобразует значения формы в структуру.Это заполняет большой пробел между Go
net/http
и HTTP-серверами, такими как NGINX.Лично я бы не стал устанавливать и настраивать другой HTTP-сервер поверх,
net/http
если знаю, что могу вместо этого подключить CDN.Думаю, у
net/http
него самый мощный HTTP-сервер из всех стандартных библиотек.источник
Из https://blog.gopheracademy.com/caddy-a-look-inside/ похоже, что Go может обрабатывать gzip, ошибки, статические файлы, маршрутизацию и заголовки http с использованием промежуточного программного обеспечения. В приведенной ниже строке из блога показано, как вы бы обработали такой запрос.
Они действительно интересным образом обрабатывают регистрацию ошибок. Пока ваше промежуточное ПО возвращает код ошибки (int), промежуточное ПО обработки ошибок автоматически обрабатывает его. Они даже дошли до настройки всего сайта на Go, как это сделал бы Nginx. «Файл nginx.conf для всех веб-сайтов Gopher Academy содержит более 115 строк. Эквивалентный файл Caddyfile - всего 50 строк».
источник