Как заставить ProxyPassReverse перезаписывать относительные перенаправления?

У меня проблемы с относительными перенаправлениями, работающими с Apache и ProxyPassReverse. Если я на внутреннем сервере использую абсолютные перенаправления, т.е. Location: http://fake.frontend.com/cat, все проксируется, как и предполагалось, однако, если я на внутреннем сервере использую относительные перенаправления, т.е. Location: /cat не работает.

Я использую Apache 2.4.25 на Debian.

У меня есть следующая конфигурация на прокси-сервере:

<Location /test/>
    ProxyPass http://fake.backend.local/
    ProxyPreserveHost Off
    ProxyPassReverse http://fake.backend.local/
    SetOutputFilter INFLATE;proxy-html;DEFLATE
    ProxyHTMLURLMap / /cat/
    ProxyHTMLURLMap fake.backend.local/ /cat/
    ProxyHTMLDocType "<!DOCTYPE html>"
</Location>

Когда я обращаюсь к прокси-серверу на http://fake.frontend.com/cat/, внутренний сервер перенаправляется в зависимости от того, вошел он в систему или нет. Если я не авторизовался, меня перенаправляют (302) на /Signin. Если я авторизован, меня перенаправляют (302) на /dashboard. Если серверное приложение использует абсолютные пути в заголовке местоположения, например: http://fake.backend.local/Signin I, тогда браузер загружает http://fake.frontend.com/cat/Signin как и предполагалось. Однако, если внутреннее приложение использует относительные пути в заголовке местоположения, то есть: /Signin браузер загружает http://fake.frontend.com/Signin (обратите внимание на отсутствующую кошку).

Я хочу использовать относительные пути на бэкенде и по-прежнему перенаправляться на http://fake.frontend.com/cat/Signin. Как настроить прокси для работы с заголовками относительного местоположения?

Как установить LAMP Stack 1/2 на Azure Linux VM
Как установить LAMP Stack 1/2 на Azure Linux VM
В дополнение к нашему предыдущему сообщению о намерении Azure прекратить поддержку Azure Database для MySQL в качестве единого сервера после 16...
1
0
285
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я нашел и статья на сайте askapache.com, в котором был пример, где нужно установить ProxyPassReverse на /.

Переход на следующую конфигурацию решил мою проблему:

<Location /test/>
    ProxyPass http://fake.backend.local/
    ProxyPreserveHost Off
    ProxyPassReverse /
    SetOutputFilter INFLATE;proxy-html;DEFLATE
    ProxyHTMLURLMap / /cat/
    ProxyHTMLURLMap fake.backend.local/ /cat/
    ProxyHTMLDocType "<!DOCTYPE html>"
</Location>

Другие вопросы по теме