Я пытаюсь получить Apache 2.4.7 на сервере Ubuntu 16.04 для прокси и обратного прокси-соединения с локальным брокером Mosquitto MQTT через WebSockets. libwebsockets
установлен, и Apache имеет mod_proxy_wstunnel
и mod_websocket_mosquitto
доступные и включенные. Я пытался следовать этому и этому, но без особой удачи.
Брокер Mosquitto работает локально, и я могу опубликовать / передать его с терминала SSH, используя mosquitto_pub
и mosquitto_sub
используя созданные мной учетные данные, но TLS отключен.
Я попробовал несколько способов заставить это работать; Я попытался заставить Apache прослушивать порт и настроить vhost на этом порту для прокси и вернуться к локальному порту, сначала используя mod_proxy_wstunnel
(верхние 2 прокомментированные строки), а затем используя mod_websockets_mosquitto
например так:
<virtualhost *:1888>
#ProxyPass / ws://127.0.0.1:1884 keepalive=on retry=360
#ProxyPassReverse / ws://127.0.0.1:1884 keepalive=on
<IfModule mod_websocket.c>
#Loadmodule mod_websocket_mosquitto /usr/lib/apache2/modules/mod_websocket_mosquitto.so
<Location />
MosBroker localhost
MosPort 1884
SetHandler websocket-handler
WebSocketHandler /usr/lib/apache2/modules/mod_websocket_mosquitto.so mosquitto_init
</Location>
</IfModule>
</virtualhost>
Не повезло там.
Затем я попробовал то же самое, но с поддоменом и портом 80:
<virtualhost *:80>
ServerName sub.domain.com
ServerAdmin some@guy.com
DocumentRoot "/var/www/public_html/subdomain"
#ProxyPass / ws://127.0.0.1:1884 keepalive=on retry=360
#ProxyPassReverse / ws://127.0.0.1:1884 keepalive=on
<IfModule mod_websocket.c>
#Loadmodule mod_websocket_mosquitto /usr/lib/apache2/modules/mod_websocket_mosquitto.so
<Location /mqtt>
MosBroker localhost
MosPort 1884
SetHandler websocket-handler
WebSocketHandler /usr/lib/apache2/modules/mod_websocket_mosquitto.so mosquitto_init
</Location>
</IfModule>
</virtualhost>
То же самое.
Журналы доступа показывают GET-запрос с использованием последнего метода и ничего при использовании первого (директивы Log содержатся в приведенных выше фрагментах, но удалены для целей этого вопроса). Ничего не отображается в журналах ошибок.
Я что-то упускаю? Может быть, есть лучший способ обойти это?