Які переваги використання Nginx перед веб-сервером для Go? [зачинено]


84

Я пишу деякі веб-служби, що повертають дані JSON, у яких багато користувачів.

Які переваги використання Nginx на моєму сервері порівняно із використанням простого сервера http?


fyi, мав багато помилок tcp, таких як скидання з'єднання з боку однорангової мережі, та час очікування вводу-виводу за допомогою сервера http http для обробки сервісу 100-ти великих запитів POST в хвилину. Поставте перед ним nginx - більше проблем.
Пітер Келлі,

Врешті-решт я вирішив використовувати сервер Go http, без NGINX, і він працює дуже добре. Я не працював з жодною проблемою. Але моя служба не запускає великі запити POST, як у вашому випадку.
Даніеле Б

20
ЦЕ НЕ ОБОВ'ЯЗКОВО. Закриття його як такого свідчить про серйозне нерозуміння міркувань та застережень, які може заповнити та надати відповідь на таке запитання. Обрана відповідь є чудовим прикладом. Насправді я бачу відповідні нові міркування у всіх наданих відповідях.
vee_ess

Відповіді:


135

Це залежить.

Нестандартно, поставивши nginx спереду як зворотний проксі-сервер, ви отримаєте:

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

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

Мені завжди було простіше поставити nginx попереду - у чому він хороший - і дозволити йому робити те, що стосується веб-сервера. Додаток My Go виконує програми, і лише мінімальний заголовок / тощо. що це потрібно. Не дивіться на те, щоб поставити nginx попереду як на "погану" річ.


Спасибі за Вашу відповідь! - 1) чи Go HTTP створює якісь журнали? - 2) чи зменшує nginx якось пропускну здатність запиту / відповіді?
Даніеле Б

3
@DanieleB HTTP-сервер Go створює лише ті журнали, які ви хочете зробити (тобто використовуючи logпакет). Якщо ви хочете зареєструвати IP-адресу, доступ до ресурсів тощо, вам потрібно це написати. Те саме стосується і встановлення заголовків, що виходять за рамки основ. Хоча у мене немає конкретних даних, nginx перед Go дійсно повинен бути не повільнішим за Go: насправді він може бути швидшим завдяки gzip та власним оптимізаціям. "Вартість" буде більшим використанням пам'яті / центрального процесора, але nginx також дуже ефективний на цьому фронті.
elithrar

16
Ще одна велика особливість: як ви будете оновлювати / підтримувати програму (не скидаючи пакетів, поки вона не працює)? Nginx дозволить вам керувати трафіком, не втрачаючи пакетів.
BraveNewCurrency

+1, Nginx на своєму місці.
Анатолій

3
На моєму Raspberry Pi розміщення Nginx перед Go значно збільшило швидкість завантаження сторінки.
425несп

17

Зі стандартним http-сервером Go є нормально. Якщо ваша програма в основному / лише є "динамічними" запитами / відповідями, то це дійсно найкращий спосіб.

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

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


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

Лак / HAProxy не потрібні, Nginx має подібний набір інструментів для кешування та балансування навантаження.
Анатолій

@mikhailov хіба не це я сказав? nginx добре працює для нього; хоча особисто я часто віддаю перевагу лаку або HAproxy. Мені їх легше налаштовувати та експлуатувати.
Запитайте у Бьорна Гансена

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 містив понад 115 рядків. Еквівалентний файл Caddy містить лише 50 рядків."

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.