Поэтому я настраиваю виртуальный путь, когда указываю на приложение node.js в моей конфигурации nginx. соответствующий раздел выглядит так:
location /app {
rewrite /app/(.*) /$1 break;
proxy_pass http://localhost:3000;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
Прекрасно работает, за исключением того, что когда мое приложение node.js (экспресс-приложение) вызывает перенаправление.
Например, на устройстве dev работает порт nginx на порте 8080, поэтому URL-адрес корня приложения узла выглядит следующим образом:
HTTP: // локальный: 8080 / приложение
Когда я вызываю редирект на «/ app» с узла, фактическое перенаправление переходит к:
Ответы:
Проблема заключается в том, что приложение Node.js неправильно выдает перенаправление. Вы можете использовать это
proxy_redirect
для исправления в nginx:источник
Мне просто нужно было решить ту же проблему с Дженкинсом, работающим за nginx. Что я сделал, так это включил порт сервера в
Host
заголовок, который отправляется Jenkins:Надеюсь, это поможет.
источник
Я пробовал описанные выше решения, но все они терпели неудачу, когда приложение узла выдавало полный URL-адрес в заголовке местоположения, например « http://nodeapp.com:8080/new/location ».
Поэтому я использовал $ http_host для передачи хоста и порта. И используя совпадение ~ ^, чтобы полностью переписать URL.
В нашем случае сервер Node работает на 8080, а наш прокси-сервер nginx работает на 8000. Это означает, что каждый полный URL-адрес в заголовке местоположения необходимо переписать. Надеюсь, это поможет кому-то !!
источник
За разговор по этому вопросу , правильное решение - настроить
Host
директиву заголовка прокси .Изменить это:
К этому:
$http_host
содержит значение, указанное в заголовке HTTP HOST, который включает порт. Перенаправления должны выбрать пользовательский порт без дальнейшей настройки в настройках OP.Эти ответы (тот же билет) уточняют далее:
источник