Рейтинг:0

Apache Proxypass перенаправляет «localhost:port» как строку URL вместо локальной службы порта

флаг cz

Среда

Версия сервера: Apache/2.4.6 (CentOS)


У меня есть два сервера, которые почти дубликаты.

ааа.com. и bbb.com.

У них почти одинаковые наборы правил Apache.

ааа.com. конфигурация

<Location "/serviceEndpoint/">
  ProxyPass http://localhost:8100/serviceEndpoint/
  ProxyPassReverse http://localhost:8100/serviceEndpoint/
</Location>
<Location "/fruit/apple">
  ProxyPass "/fruit/apple" "http://localhost:8100/serviceEndpoint/fruit/apple"
  ProxyPassReverse "/fruit/apple" "http://localhost:8100/serviceEndpoint/fruit/apple"
</Location>

Так /serviceEndpoint это сервис, использующий порт 8100, и /фрукты/яблоко это его сервлет.

bbb.com. конфигурация

<VirtualHost _default_:80>
  ProxyPass "/serviceEndpoint/" "http://localhost:20100/serviceEndpoint/"
  ProxyPassReverse "/serviceEndpoint/" "http://localhost:20100/serviceEndpoint/"

  ProxyPass "/fruit/apple" "http://localhost:20100/serviceEndpoint/fruit/apple"
  ProxyPassReverse "/fruit/apple" "http://localhost:20100/serviceEndpoint/fruit/apple"
</VirtualHost>

Выглядит так же, но находится внутри VirtualHost:80, если это что-то меняет.
(*редактировать, я тестировал с той же конфигурацией, но результат был таким же)

Проблема

Обе aaa.com/фрукты/яблоко или же bbb.com/фрукты/яблоко работает хорошо.

Но при использовании сервиса ответ.sendRedirect()(java) и перенаправляет браузер на /фрукты/яблоко,
Только ааа.com. работает и bbb.com. пытается подключить буквально HTTP://локальный: 20100/фрукты/яблоко из клиентского браузера.

ааа.com заголовок ответа перенаправления

HTTP/1.1 302
Дата: пн, 09 мая 2022 г., 08:01:29 по Гринвичу
Сервер: Апач
Параметры X-Frame: SAMEORIGIN
Строгая транспортная безопасность: max-age=63072000; includeSubDomains
Расположение: /fruit/#!/some_controller
Длина содержимого: 0
Set-Cookie: JSESSIONID=4EA61F0E6031621E540DBDC9F6C54D64; Путь=/конечная точка службы; HttpOnly
Set-Cookie: JSESSIONID=4EA61F0E6031621E540DBDC9F6C54D64; Безопасный; Только HTTP; Самесайт=Строгий
X-XSS-защита: 1; режим = блок
Keep-Alive: таймаут=15, макс=95
Соединение: Keep-Alive

bbb.com заголовок ответа перенаправления

HTTP/1.1 302
Дата: пн, 09 мая 2022 г., 08:01:29 по Гринвичу
Сервер: Apache-Койот/1.1
Параметры X-Frame: SAMEORIGIN
Строгая транспортная безопасность: max-age=63072000; includeSubDomains
Местоположение: http://localhost:20100/fruit/#!/some_controller
Длина содержимого: 0
Set-Cookie: JSESSIONID=4EA61F0E6031621E540DBDC9F6C54D64; Путь=/конечная точка службы; HttpOnly
Set-Cookie: JSESSIONID=4EA61F0E6031621E540DBDC9F6C54D64; Безопасный; Только HTTP; Самесайт=Строгий
Keep-Alive: таймаут=15, макс=95
Соединение: Keep-Alive

Вопрос

Из настроек Apache, что может вызвать такое поведение и как мне это исправить?

флаг in
Редирект не исходит от Apache. Настройте серверную службу с правильным URL-адресом для перенаправления.
Lunartist avatar
флаг cz
@GeraldSchneider Путь перенаправления — «/fruit/apple», и служба отлично работает с «aaa.com». Что может вызвать это несоответствие?
Lunartist avatar
флаг cz
@GeraldSchneider `aaa.com` работает на Tomcat 8.5, а `bbb.com` работает на Tomcat 8.0. Повлияет ли это на поведение `response.sendRedirect()`?
Рейтинг:0
флаг cz

Это была разница с Tomcat. Tomcat 8.0 перенаправляет на локальный хост, тогда как 8.5 перенаправляется нормально.

Рейтинг:0
флаг us
Rob

Что Директива ProxyPassReverse определяет область URL-путей, которые Apache наиболее корректно использует во внутренних ответах, чтобы гарантировать, что посетителям сайта будет предоставлен правильный URL-адрес, соответствующий их запросам к Apache.

ProxyPassReverse "/fruit/apple" "http://localhost:20100/serviceEndpoint/fruit/apple"

bbb.example.com ответ перенаправляет на

 Местоположение: http://localhost:20100/fruit/#!/some_controller
                                       \
                                        `- "яблоко" отсутствует. 

и поэтому Место расположения заголовок не исправлен директивой ProxyPassReverse.

Похоже, что либо серверное приложение не создает правильных самореферентных URL-адресов, и вам нужно решить это во внутреннем приложении, либо вы сделали неверное предположение, и ваша конфигурация apache должна быть:

ProxyPass "/fruit/" "http://localhost:20100/serviceEndpoint/fruit/"
ProxyPassReverse "/fruit/" "http://localhost:20100/serviceEndpoint/fruit/"
Lunartist avatar
флаг cz
`aaa.com.` обычно перенаправляет на `https://aaa.com/apple/#!/some_controller`. Что может иметь такое значение?

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

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