Рейтинг:0

Как передать html сайт с другого сервера через обратный прокси nginx?

флаг cn

Я пытаюсь загрузить приложение Angular из другой внутренней службы при вызове localhost:81/internal?pageId=10. Но все, что происходит, это то, что nginx перенаправляет меня в браузере на localhost:80.

У меня есть эта конфигурация:

  местоположение ~ /internal(?<раздел>.+) {
    proxy_pass http://192.168.1.100:8080/public/internal$section;
    proxy_set_header Хост $host;
  }

Как я читал в нескольких других вопросах, это должно работать, но по какой-то причине nginx перенаправляет меня на порт 80.

Заголовки запроса:

ПОЛУЧИТЬ /внутренний/?pageId=10
Принять: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3; р=0,9
Accept-Encoding: gzip, deflate
Accept-Language: de-DE,de;q=0.9,en-US;q=0.8,en;q=0.7
Соединение: Keep-alive
Хост: локальный: 81
Обновить-небезопасные-запросы: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, например Gecko) Chrome/101.0.4951.67 Safari/537.36

Заголовки ответа:

HTTP/1.1 302 Найдено
Сервер: nginx/1.21.6
Дата: Чт, 19 мая 2022 г., 09:15:34 по Гринвичу
Передача-кодирование: по частям
Соединение: Keep-alive
Местоположение: http://localhost/public/internal?pageId=10
X-Powered-By: Пристань (9.4.40.v20210413)

Это вообще возможно? И если да, то как мне это исправить?

Ivan Shatsky avatar
флаг gr
Возможно, ваша внутренняя служба не ожидает, что для заголовка `Host` будет установлено значение `$host` (что равно `localhost:81` в вашем случае), и вам следует вместо этого использовать `proxy_set_header Host localhost`? Кроме того, способ, которым вы используете свою строку запроса, не передается восходящему потоку (если вы не добавите суффикс `$is_args$args` к вашей директиве `proxy_pass`).
Apollo avatar
флаг cn
Внутренний сервер не проверяет заголовки. Я просто скопировал строки, которые нашел на StackExchange, чтобы убедиться, что это не проблема. Можете ли вы привести пример, как добавить $is_args$args? Заменить раздел $?
Ivan Shatsky avatar
флаг gr
Нет, просто добавьте его в конец URI, переданного на внутренний сервер: `proxy_pass http://192.168.1.100:8080/public/internal$section$is_args$args;`. Вы можете проверить, что происходит, запросив требуемый URI непосредственно с внутреннего сервера: `curl -v http://localhost/public/internal/?pageId=10`, `curl -v -H 'Host: localhost:81' http: //локальный/общедоступный/внутренний/?pageId=10`. Пример из вашего вопроса (`localhost:81/internal?pageId=10`) не соответствует предоставленным вами заголовкам (`localhost:81/internal/?pageId=10`, обратите внимание на косую черту), если где-то в ваша конфигурация nginx.

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

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