Поэтому я настраиваю виртуальный путь, указывая на приложение node.js в моем nginx conf. соответствующий раздел выглядит так:
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 (экспресс-приложение) вызывает перенаправление.
В качестве примера, в блоке разработчика запущен nginx на порту 8080, поэтому URL-адрес корня приложения узла выглядит так:
http: // локальный: 8080 / приложение
Когда я вызываю перенаправление на / app из узла, фактическое перенаправление идет на:
Мне просто нужно было решить ту же проблему с Jenkins, работающим за nginx. Для меня это сделало включение порта сервера в Host
заголовок, который отправляется Дженкинсу:
proxy_set_header Host $host:$server_port;
Надеюсь, это поможет.
Проблема в том, что приложение Node.js неправильно выполняет перенаправление. Вы можете использовать proxy_redirect
чтобы исправить это в nginx:
proxy_redirect http://localhost/ http://localhost:8080/;
Согласно разговору о этот вопрос, правильное разрешение - настроить прокси-сервер Host
директива заголовка.
Измените это:
proxy_set_header Host $host;
К этому:
proxy_set_header Host $http_host;
$http_host
содержит значение, указанное в заголовке HTTP HOST, который включает порт. Перенаправления должны использовать настраиваемый порт без дальнейшей настройки OP.
Эти ответы (тот же билет) развиваются дальше:
Я пробовал указанные выше решения, но все они терпели неудачу, когда приложение узла выдавало полный URL-адрес в заголовке местоположения, например "http://nodeapp.com:8080/new/location"
Итак, я закончил использовать $ http_host для передачи хоста и порта. И используя совпадение ~ ^, чтобы полностью переписать URL-адреса.
proxy_pass http://10.0.0.3:8080;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $http_host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_redirect default;
proxy_redirect ~^(https?://[^:]+):\d+(?<relpath>/.+)$ http://10.0.0.3:8000$relpath;
В нашем случае сервер Node работает на 8080, а наш прокси nginx работает на 8000. Это означает, что каждый полностью определенный URL в заголовке местоположения необходимо переписать. Надеюсь, это кому-то поможет !!