Вопрос или проблема
Возможно ли использовать подстановочный символ для реверсивного прокси с помощью ProxyPass?
Я видел похожую конфигурацию ниже для ProxypassMatch, поэтому попытался создать что-то подобное, используя только proxypass.
ProxyPass ^/retirement-readiness-savings(.*)$ http://prod-domain-com-2018.azurewebsites.net/retirement-readiness-savings-november-2018/$1
Проблема, с которой я сталкиваюсь, связана с ограничениями по количеству символов (25) в именах каталогов в нашей новой CMS.
Полный URL, например, ниже:
/retirement-readiness-savings-november-2018
Для примера с конфигурацией реверсивного прокси ниже:
#ProxyPass ^/retirement-readiness-savings(.*)$ http://prod-domain-com-2018.azurewebsites.net/retirement-readiness-savings-november-2018$1
#ProxyPassReverse ^/retirement-readiness-savings(.*)$ http://prod-domain-com-2018.azurewebsites.net/retirement-readiness-savings-november-2018$1
Таким образом, пока URL соответствует первым 3 словам, он все равно будет отображать ту же страницу, игнорируя november-2018.
У нас установлен только ProxyPass, и мы используем httpd.conf для управления ReverseProxy.
Мы используем RHEL 5.11 с установленным модулем mod_proxy.
ИЗМЕНЕНИЕ: Что я пытаюсь сделать, так это проверить первые 25 символов пути каталога, но все равно сопоставить с полным Azure путем.
Мне неясно, где именно ограничение в 25 символов, но, возможно, вы хотите сделать что-то подобное?
ProxyPass ^/site/(.{1,25}).*$ http://prod-domain-com-2018.azurewebsites.net/site/$1
Это захватит первые 25 символов после /site/
и затем использует это в сопоставлении. Например, запрос для этого:
/site/retirement-readiness-savings-some-thing-or-other
… будет сопоставлен с этим:
http://prod-domain-com-2018.azurewebsites.net/site/retirement-readiness-savi
(‘retirement-readiness-savi’ == ограничение в 25 символов)
Ответ или решение
Возможен ли обратный прокси с использованием символа подстановки?
Да, использование символа подстановки в конфигурации обратного прокси, особенно с параметрами ProxyPass
и ProxyPassReverse
, вполне допустимо и может быть настроено в вашем Apache HTTP Server. В данной статье мы рассмотрим, как правильно реализовать подобную настройку, а также коснемся важности учета ограничений на длину имени каталога в вашей системе управления контентом (CMS).
Проблематика
Как вы уже заметили, существует ограничение на 25 символов в имени каталога в вашей новой CMS. Это создает необходимость упрощенной конфигурации для корректной обработки адресов, которые превышают данный лимит, сохраняя при этом правильную маршрутизацию на внутренний сервис.
На примере, который вы привели:
ProxyPass ^/retirement-readiness-savings(.*)$ http://prod-domain-com-2018.azurewebsites.net/retirement-readiness-savings-november-2018/$1
здесь происходит явная маршрутизация определенного пути, однако, как вы упомянули, эта конфигурация не учитывает ограничения на длину имени.
Решение с использованием регулярных выражений
Чтобы решить вашу задачу, вы можете использовать регулярные выражения для захвата первых 25 символов из запрашиваемого адреса. Вот как может выглядеть ваша конфигурация:
ProxyPassMatch ^/retirement-readiness-savings(.{0,25}).*$ http://prod-domain-com-2018.azurewebsites.net/retirement-readiness-savings-november-2018/$1
ProxyPassReverse ^/retirement-readiness-savings(.{0,25}).*$ http://prod-domain-com-2018.azurewebsites.net/retirement-readiness-savings-november-2018/$1
В данном случае:
ProxyPassMatch
будет обрабатывать URL, который начинается с/retirement-readiness-savings
, захватывая до 25 символов после данного префикса.$1
в целевом URL будет заменено на соответствующую часть из исходного запроса.
Примеры
Если вы сделаете запрос по следующему URL:
/retirement-readiness-savings-abc-def-ghij
то с вашим обновленным конфигом прокси запрос будет направлен на:
http://prod-domain-com-2018.azurewebsites.net/retirement-readiness-savings-november-2018/retirement-readiness-savings-abc-def
Тем самым, вы сможете динамически обрабатывать запросы, не нарушая ограничение на длину.
Заключение
Конфигурация обратного прокси с использованием символов подстановки может значительно упростить работу с URL вашего сайта, особенно в условиях ограничений, которые накладывает ваша CMS. Использование регулярных выражений в настройках Apache позволяет гибко управлять маршрутами, что может быть особенно полезно в сценариях, требующих динамической маршрутизации на основе входящих запросов.
Если у вас возникнут дополнительные вопросы или нужно будет провести более детальный анализ, не стесняйтесь обращаться за помощью. Ваше понимание архитектуры и конфигурации Apache поможет вам в дальнейшем оптимизировать работу вашего веб-приложения.