У меня есть несколько сервлетов, прослушивающих внутренние порты, недоступные извне. Я использую 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.