Назад | Перейти на главную страницу

Apache: прокси-сервер внутреннего URL-адреса с помощью регулярного выражения

У меня есть несколько сервлетов, прослушивающих внутренние порты, недоступные извне. Я использую Apache ProxyPass и ProxyPassReverse директивы для их безопасного обслуживания из порта 443:

ProxyPass         /media http://localhost:9002/
ProxyPassReverse  /media http://localhost:9002/

Это отлично работает - https://example.com/media подается из http://localhost:9002/.

Проблема возникает, когда URL-адрес имеет различную часть. Например:

https://example.com/image/IMAGE_NAME_1 должен подаваться из http://localhost:9002/image/IMAGE_NAME_1.

И https://example.com/image/IMAGE_NAME_2 должен подаваться из http://localhost:9002/image/IMAGE_NAME_1.

Я пробовал несколько вариантов, в том числе:

RewriteEngine  on
RewriteRule   ^/image/(.*)$  http://localhost:9002/image/$1 [L,PT]
ProxyPass         /image/ http://localhost:9002/image
ProxyPassReverse  /image/ http://localhost:9002/image

Но эта конфигурация приводит к Bad Request в браузере и

Invalid URI in request GET /image/1 HTTP/1.1

В журналах.

Как мне проксировать внутренние сервлеты, в которых URL-адрес имеет различную часть?

Ты используешь ProxyPassMatch вместо:

ProxyPassMatch    ^/media http://localhost:9002/(.*)
ProxyPassReverse  ^/media http://localhost:9002/(.*)

Подробности читайте в Онлайн-документация Apache.