Рейтинг:0

Обратный прокси-сервер NGINX не работает с swagger-ui-express

флаг in

Я использую NGINX для proxy_pass все запросы с префиксом /авторизация/ на сервер API nodejs по адресу локальный: 3000.

У меня есть этот единственный файл конфигурации /etc/nginx/sites-enabled/default3.conf:

сервер {
    
    местоположение / авторизация / {
        переписать /auth/(.+) /$1 break;
        прокси_пароль http://127.0.0.1:3000;
        прокси_перенаправление выключено;
        proxy_set_header HOST $хост;
    }


}

Он отлично работает для большинства моих запросов (вместо GET http://локальный:3000/выход из системы, ПОЛУЧАТЬ http://локальный/аутентификация/выход из системы будет работать как положено), за исключением этого запроса GET http://локальный/аутентификация/документы, который должен сопоставляться с http://локальный: 3000/документы но я получил перенаправление:

HTTP/1.1 301 перемещен навсегда
Сервер: nginx/1.18.0 (Ubuntu)
Дата: среда, 15 декабря 2021 г., 01:59:02 по Гринвичу
Тип содержимого: текст/html; кодировка = UTF-8
Длина контента: 175
X-Powered-By: Экспресс
Доступ-Контроль-Разрешить-Происхождение: *
Content-Security-Policy: default-src 'none'
X-Content-Type-Options: nosniff
Местонахождение: /документы/

затем 404 NOT FOUND вместо этого:

HTTP/1.1 404 не найден
Сервер: nginx/1.18.0 (Ubuntu)
Дата: ср, 15 декабря 2021 г., 03:20:26 по Гринвичу
Тип содержимого: текст/html
Передача-кодирование: по частям
Соединение: Keep-alive
Кодировка содержимого: gzip

Кажется, когда я ПОЛУЧАЮ http://локальный/аутентификация/документы, запрос попал на мой сервер nodejs, но затем был перенаправлен обратно на http://локальный/документы, но как это могло быть возможно? Я все еще могу ПОЛУЧИТЬ http://локальный: 3000/документы без проблем.

ОБНОВЛЕНО

http://локальный: 3000/документы здесь я использую пользовательский интерфейс Swagger для серверного API, используя модуль npm чванство-UI-экспресс.

флаг in
Скорее всего, ваш сервер nodejs не настроен с правильным базовым URL-адресом и генерирует ошибочные перенаправления.
xceeded avatar
флаг in
Да, ты прав. Это была проблема с моим приложением nodejs, то есть с модулем `swagger-ui-express`. Я все еще пытаюсь это исправить.
Рейтинг:0
флаг in

Эта проблема

  • Проблема кроется в модуле чванство-UI-экспресс который мой сервер nodejs использует для обслуживания документов API.
  • Я настроил его для показа на /документы и модуль сделает 301 редирект, чтобы сделать запрос точно $HOST/документы, для HOST это любой хост запроса (локальный: 3000, или же локальный хост).
  • Таким образом, при размещении за обратным прокси-сервером NGINX, как я, каждый GET http://локальный/аутентификация/документы попадет на мой сервер nodejs, но будет перенаправлен на http://локальный/документы как я сказал в пункте 2.

Решение

  • Настройте NGINX для создания другого proxy_pass при совпадении запроса. /документы/.
    местоположение /документы/ {
        прокси_пасс http://127.0.0.1:3000/docs/;
    }
  • Будь осторожен что передаваемый URI имеет завершающая косая черта, потому что модуль чванство-UI-экспресс ожидает косую черту в конце. В противном случае /аутентификация/документы будет перенаправлен на /документы/ и /документы/ будет перенаправлен на /аутентификация/документы снова (бесконечный цикл до ошибки). Хотя можно удалить завершающую косую черту как в сопоставлении местоположения, так и в URL-адресе прокси-пропуска.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.