Обратный прокси-сервер Apache для веб-сокета в том же контексте, что и http

Обратный прокси-сервер Apache для веб-сокета в том же контексте, что и http

У меня есть Apache/2.4.6, работающий как обратный прокси для некоторых приложений. Теперь мне нужно настроить еще один. HTTP-прокси работает отлично, но в некоторых разделах веб-страницы клиент пытается запустить соединение websocket.

Проблема в том, что URL-адрес частично общий:

HTTP-запрос:http://domain/context/[whatever]

Запрос WS:ws://domain/context/specific-text?param1&param2

Невозможно использовать If(проверка протокола), так как ProxyPass не может войти внутрь <If>.

Попробовал установить:

<Location /context/specific-text>
    ProxyPass ws://internal.domain/context/specific-text

До

<Location /context/>
    ProxyPass http://internal.domain/context/

Но это не работает, полагаю, из-за (несуществующего) завершающего слеша.

Дополнительные данные:

  • Сокет жалуется на то, что не принимает код «200», Apache не возвращает ws-соединение, но в какой-то момент проксирование выполняется.
  • Пробовал и с и без<Location>
  • Думал переписать specific-text, specific-text/но мне не нравится манипулировать вещами, которыми я не управляю. Приложение платное, не могу спросить, навредит ли оно чему-нибудь. Ну, я мог бы, просто не стал бы ожидать ответа.

решение1

Мне подходит следующий фрагмент конфигурации ProxyPass:

ProxyPass        /specific wss://0.0.0.0:4000/specific
ProxyPassReverse /specific wss://0.0.0.0:4000/specific

ProxyPass        / https://0.0.0.0:4000/
ProxyPassReverse / https://0.0.0.0:4000/

Theдокументация гласит:

Заказ директив ProxyPass

Настроенные правила ProxyPass и ProxyPassMatch проверяются в порядке настройки. Первое совпавшее правило побеждает.

Связанный контент