Выгрузка SSL Apache / обратный прокси для Websockets. (Приложение Spring)

#apache #ssl #proxy #websocket #activemq

#apache #ssl #прокси #веб-сокет #activemq

Вопрос:

У меня есть приложение Java Spring, запущенное на сервере Tomcat. Я использую сервер Apache для разгрузки SSL.

 <VirtualHost *:8043>
    ServerName myserver.com
    SSLEngine on
    SSLCertificateFile "pathtokeystore.crt"
    SSLCertificateKeyFile "pathtoserver.key"

    ProxyRequests On
    <Proxy *>
        Order deny,allow
        Allow from all
    </Proxy>
    ProxyPassMatch      ^/(MyApp/.*)$ http://App:8080/$1
    ProxyPassReverse    /MyApp http://App:8080/Home
    //not including other stuff below
  

Это работает, и я могу отправить https-запрос на сервер apache через порт 8043, и запрос будет перенаправлен на сервер tomcat в виде http-запроса. Поправьте меня, если я неправильно понимаю, но я считаю, что так оно и работает.

В моем приложении есть конечная точка Websocket. (Я использую Spring / Stomp / ActiveMQ). В настоящее время URL-адрес конечной точки: ws:// appname:61614. Я могу подключиться напрямую к конечной точке websocket, но это небезопасно, и я хотел бы изменить это на wss: // appname: 61614 и отправлять запросы через сервер apache на wss: // myapp: 61614, который будет обрабатывать SSL, а затем пересылать их на ws: // app: 61614.

Возможно ли добиться этого таким же образом, как это можно сделать с помощью https и http? Итак, могу ли я иметь что-то вроде этого:

 //Loadmodule mod_proxy_wstunnel at the start of httpd conf file

    <VirtualHost *:61615>
        ServerName myserver.com
        SSLEngine on
        SSLCertificateFile "pathtokeystore.crt"
        SSLCertificateKeyFile "pathtoserver.key"

        ProxyPassMatch      / ws://app:61614
        ProxyPassReverse    / ws://app:61614
  

Правильно ли я понимаю, что все запросы wss, которые я делаю на порт 61615 сервера apache, будут перенаправлены на ws:// app: 61614 моего приложения tomcat? И это будет работать? Может ли Apache обрабатывать прокси-сервер websockets таким образом?

Ответ №1:

ProxyPassMatch требует регулярного выражения и какой-то обработки в цели. ProxyPassMatch / ws:// app:61614 выглядит для меня очень некорректно. Также сопоставьте конечные косые черты.

Попробуйте и дайте нам знать:

 ProxyPass / ws://app:61614/
ProxyPassReverse / ws://app:61614/