Войти
ПрограммированиеФорумВеб

WebAPI + Client на одном NGINX

#0
13:16, 10 фев 2021

Привет.

Помню на Lighttpd была такая проблема. Есть два стула сайта. На одном живет WebAPI, на другом - сайт, который это API использует. Использует - то есть делает HTTP-запросы на это API в процессе обработки своих собственных запросов. И вот я уже не помню точно подробностей, но когда все жило на дефолтных настройках, запрос на API мог зависнуть, как я догадываюсь, по причине того, что запрос на API попадал на того же воркера, который ждет ответа на запрос от сайта, внутри которого и был инициирован этот запрос на API. То есть, он начинал ждать сам себя, и, в итоге, отваливался по тайм-ауту.

В связи с чем вопросы: есть ли что-то такое на NGINX, и если да, как этого избежать? Достаточно ли хранить сайт и API в двух разных server (в смысле конфига), или нужно что-то еще?

#1
20:23, 10 фев 2021

Если сервер один, зачем тогда всё гонять через http (WebAPI)?

#2
23:53, 10 фев 2021

rcsim
> Если сервер один, зачем тогда всё гонять через http (WebAPI)?
Серверов несколько, просто одно из приложений живет на том же сервере, что и API.

#3
10:03, 11 фев 2021

DEN
> запрос на API мог зависнуть, как я догадываюсь, по причине того, что запрос на
> API попадал на того же воркера

Скорее всего конкуренция на сессию. Браузер посылает в куках идентификатор сессии и стандартные обработчики сессий например в PHP не позволяют одновременно работать обработчикам двух одинаковых сессий чтобы не запутать конкуренцию за другие ресурсы.
Разведением на разные домены (любого уровня) проблема разрешится точно.
Так же можно просто отключить сессии для WebAPI если ему они не нужны или в запросах передаётся достаточно информации для нужд идентификации.
В PHP, например, сессиями можно управлять программно вызывая session_start() (и собственно эта функция застопорится если уже обрабатывается скрипт с такой же сессией).

#4
12:57, 11 фев 2021

=A=L=X=
> Скорее всего конкуренция на сессию.
Нее, ни сайт, ни апи, не используют PHPшные сессии.

#5
5:27, 12 фев 2021

DEN
> Нее, ни сайт, ни апи, не используют PHPшные сессии.

Во первых могут быть любые другие - Java/node.js и т.п., т.к. сам механизм давно уже выработан. Во вторых если бы не использовали, то такого эффекта не было бы. Без сессий веб-сервер выполняет запросы параллельно. Можно в панели разработки браузера проверить (в Firefox пункт "Сеть") какие кукисы браузер посылает веб-серверу и если там будет видно что-то типа "SESS_ID", то значит где-то в конфигах включены автосессии и есть соответствующее поведение даже без ручного вызова функций по их активации.

#6
10:48, 12 фев 2021

=A=L=X=
Java/node.js нет, автокук нет, полезных ископаемых нет, населена роботами. Я понял, что ты любишь сессии, но предлагаю поговорить о чем-то еще.

#7
14:43, 12 фев 2021

DEN

Ну если сессий гарантированно нет, то воркеры должны работать параллельно.
Но если это всё-таки не так (опять таки по первопосту чувствуется какая-то неуверенность), то можно еще кивнуть в сторону БД. Но это уже более широкий вопрос - надо поставить панель управления БД если еще нет и смотреть нет ли там блокировок.

ПрограммированиеФорумВеб

Тема в архиве.