从https到节点服务器的套接字连接给出混合内容错误

时间:2019-03-27 16:48:50

标签: javascript node.js websocket socket.io reverse-proxy

我有一个在https上运行的网站,作为新功能的一部分,我创建了一个基于nodejs + socket.io的对话服务器。

我决定在单独的AWS实例上托管会话服务器。 当我尝试从我的主要网站(在https上运行)到对话服务器(在http://123.123.45.56之类的AWS静态IP实例上运行)建立套接字连接时,它无法正确建立套接字连接,并且浏览器显示以下错误记录到控制台:

Mixed Content: The page at 'https://www.mydomain' was loaded over HTTPS, but requested an insecure XMLHttpRequest endpoint 'http://123.123.45.56/socket.io/?payload=asdfkasdla'. This request has been blocked; the content must be served over HTTPS.

这是我制作连接节点服务器的方式:

io.connect(chatServerURL,{query: "payload=" + encryptedPayload,secure: false});

在会话服务器上,我使用路由/socket.io将来自端口80的所有流量路由到本地节点服务器端口和服务器,如下所示:

  RewriteEngine On
  RewriteCond %{REQUEST_URI}  ^/socket.io            [NC]
  RewriteCond %{QUERY_STRING} transport=websocket    [NC]
  RewriteRule /(.*)           ws://localhost:3000/$1 [P,L]

  ProxyPass / http://localhost:3000/
  ProxyPassReverse / http://localhost:3000/

我应该怎么做才能使其正常工作? 我没有仅用于聊天服务器的域,然后将ssl分配给该域。我知道这不应该是使其工作的方法。

有什么解决方案?

1 个答案:

答案 0 :(得分:0)

这可能会在将来帮助某个人采取正确的方法。 执行此操作的方法是将套接字连接发送到同一服务器,即在https上运行的服务器,然后在该服务器上使用反向代理将套接字请求代理到在http上运行的另一台计算机(运行node + socket.io服务器)。

在Apache服务器上,我需要启用模块proxyproxy_http,并在apache虚拟主机配置中添加以下指令:

ProxyPass /socket.io/ http://123.45.56.67/socket.io
ProxyPassReverse /socket.io/ http://123.45.56.67/socket.io

在线上有很多资源,我只是没有意识到这个代理东西。 就是这样。

相关问题