Apache: динамический обратный прокси

Возможно ли, чтобы сервер Apache динамически проксировал все запросы, определенные в подкаталоге? Типа:

https://proxy.example.com/host1           -> https://host1.example.com
https://proxy.example.com/host2           -> https://host2.example.com
https://proxy.example.com/host3/dir1      -> https://host3.example.com/dir1

Бонус:

https://proxy.example.com/host4:8000      -> https://host4.example.com:8000
https://proxy.example.com/host5:8080/dir2 -> https://host5.example.com:8080/dir2

Мои знания, кхм, ограничены. Можно ли расширить следующий пример?

RewriteEngine On
RewriteRule ^(.*)$ https://%{HTTP_HOST} [P]

SSLEngine on
SSLProxyEngine On
ProxyRequests Off

ProxyPass            /  https://$1/
ProxyPassReverse     /  https://$1/
ProxyPreserveHost On

С уважением

1
задан 28 October 2020 в 10:23
1 ответ

Вы можете использовать директиву ProxyPassMatch следующим образом:

ProxyPassMatch /([^/]*)/(.*)$ https://$1.example.com/$2

Однако вы получите частичные результаты.

Прокси-часть будет работать, однако путь к файлам cookie будет другим: поскольку вы запрашиваете /host1, а внутренний сервер устанавливает для файлов cookie значение /, это может привести к проблемам. . Кроме того, перенаправления не обрабатываются должным образом: если целевой хост перенаправляет на абсолютный URL-адрес, например. устанавливает себе заголовок Location: http://... , тогда прокси не будет перезаписывать этот заголовок, заставляя браузер переходить по прямой ссылке.

Существует решение как для проблем с файлами cookie, так и для перенаправления с помощью директив ProxyPassReverse, ProxyPassReverseCookieDomain и ProxyPassReverseCookiePath, но, насколько мне известно, ни одна из них они поддерживают регулярное выражение или любые динамические сопоставления. Конечно, вы можете указать их по одному, но это делает всю идею динамического проксирования бессмысленной.

2
ответ дан 28 October 2020 в 08:14

Теги

Похожие вопросы