Обратный прокси-сервер nginx с аутентификацией header

Я пытаюсь настроить nginx для работы в качестве обратного прокси для двух приложений: веб-интерфейса (IIS) и серверной части .NET Core (Kestrel), все работает в рое докеров. Я переписываю все вызовы / api на бэкэнд и все остальные вызовы во фронтенд.

В моих текущих настройках все работает нормально, пока я не войду в приложение. Это использует службу аутентификации IdentityServer OAuth / OpenID, вызывая авторизацию -заголовок, который будет добавлен к запросу для всех вызовов с токеном носителя. Как только этот заголовок присутствует, сервер nginx возвращает таймауты от вышестоящих серверов. Это происходит на обоих серверах, и если я отключу передачу заголовка auth, nginx будет работать нормально и проксировать запрос. Для внешнего интерфейса это не проблема, поскольку он не требует заголовка, но, очевидно, серверная часть больше не работает. Странно то, что если я в какой-то момент обрываю заголовок (это довольно длинная строка), запрос работает, но, очевидно, моя внутренняя служба возвращает 500, потому что это больше не действительный токен.

Я царапал моя голова пытается понять, что не так, и я пробовал любое количество вариантов конфигурации. Очень похоже, что запрос остановлен на nginx, поскольку ни один из серверов за прокси-сервером даже не получает запрос, когда он терпит неудачу. Ведение журнала на уровне nginx не дает ничего, кроме `` тайм-аута восходящего потока (110: тайм-аут операции) при чтении заголовка ответа из восходящего потока '' - ошибки и даже увеличение этого тайм-аута ничего не делает, что имеет смысл как тот же самый запрос без авторизации заголовок работает.

1
задан 26 April 2020 в 18:41
1 ответ

Очевидно, проблема связана с тем, что мы запускаем гибридный рой с узлами Windows и Linux. Существует ошибка, связанная с сетевыми драйверами, с которой, как ни странно, мало кто сталкивается. Когда запрос становится слишком большим, запрос не направляется должным образом внутри сети докеров. Это приводит к тому, что nginx отправляет запрос и ждет ответа, который никогда не придет, поскольку запрос никогда не доходит до вышестоящего сервера...

1
ответ дан 27 April 2020 в 17:44

Теги

Похожие вопросы