在端口80上转发非HTTP通信

我正在创build一个使用MQTT协议发送实时消息的Android应用程序,但本地防火墙是严格的,并阻止大多数端口,所以Android应用程序无法连接。 (服务器位于防火墙之外,但我所在位置的用户无法通过它连接)

是否有可能转发从端口80到1883或443到8883服务器端的非HTTPstream量,同时仍然正确处理HTTPstream量? (我知道一些防火墙也通过tcp阻止非HTTP,但至less可以容纳几个人)

我有一个VPS Linode在CentOS 5上运行networking服务器的NGINX。

你可以编写一个拦截TCPstream的代理,检查客户端发送的前三个字节的数据,如果它们不是全部的字母(AZ,az),则认为它是非HTTP。 代理HTTP到Web服务器侦听的端口。 代理非HTTP到您的MQTT服务器侦听的端口。

这不是严格正确的 – 这是一个黑客。 但我已经成功地使用它来做很多类似的事情。 我浏览了MQTT协议 ,看起来MQTT消息看起来不像HTTP。 如果是这样,你必须检查更多的细节。 例如,检查已知的HTTP动词和/或动词后面的空格。

我仍然认为最好/正确的解决scheme是在防火墙中打开一个端口。 这是一个丑陋的黑客,使防火墙不太有用。 任何被授权部署服务器应用程序的人也应该能够获得为该应用程序打开的端口。