蚊子+阿帕奇

蚊子+阿帕奇

我正在尝试在 Ubuntu 16.04 服务器上安装 Apache 2.4.7,以便通过 WebSockets 代理和反向代理与本地 Mosquitto MQTT 代理的连接。libwebsockets已安装,并且 Apache 已安装mod_proxy_wstunnelmod_websocket_mosquitto并已启用。我一直在尝试关注,但运气不佳。

Mosquitto 代理在本地工作,我可以使用我创建的凭据从 SSH 终端发布/订阅它,但 TLS 已禁用mosquitto_pubmosquitto_sub

我尝试了几种方法让它工作;我试图让 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 [email protected]
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 请求,而使用前一种方法时则不会显示任何内容(日志指令在上面的代码片段中,但为了回答这个问题而删除了)。错误日志中不会显示任何内容。

我是不是遗漏了什么?也许有更好的方法可以解决这个问题?

答案1

我偶然发现了同样的问题并尝试使用 mod_websocket_mosquitto 来使其工作,但没有成功。

对我有用的是直接使用 proxy_wstunnel (以下这篇短文- 我没有遇到文章中提到的问题,现在应该已经修复了):

首先我告诉 apache 监听端口 1883 以接受 mqtt 请求(此端口的默认配置文件是ports.conf)。当然,您基本上可以选择任何端口,只要您的客户端知道要连接到哪里即可。

Listen 1883

然后我设置了一个简单的 VirtualHost 来代理传入的请求:

<VirtualHost *:1883>

        ProxyRequests Off

        ProxyPreserveHost On

        ProxyPass /mqtt ws://$Broker-IP:$Broker-Port
        ProxyPassReverse /mqtt ws://$Broker-IP:$Broker-Port
</VirtualHost>

这个配置可能需要一些调整,但它允许我使用我的 apache 的 IP 连接到我的代理。

为了测试这一点,我使用了 eclipse 的mqtt-间谍与命令行相比,它更易于手动发布/订阅:)

PS:请记住告诉 mosquitto 使用 websockets 作为协议mosquitto.conf

listener $Broker-Port
protocol websockets

相关内容