javascript - 从 https 到节点服务器的套接字连接给出混合内容错误
问题描述
我有一个在 https 上运行的网站,作为新功能的一部分,我创建了一个基于 nodejs+socket.io 的对话服务器。
我决定在单独的 AWS 实例上托管对话服务器。当我尝试从我的主网站(在 https 上运行)到对话服务器(在 AWS 静态 IP 实例上运行,如http://123.123.45.56)建立套接字连接时,它没有正确建立套接字连接,浏览器显示以下错误记录到安慰:
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 分配给该域。我知道这不应该是让它发挥作用的方法。
解决办法是什么?
解决方案
这可能会帮助将来的人采取正确的方法。这样做的方法是将套接字连接发送到同一台服务器,即在 https 上运行的服务器,然后使用反向代理将套接字请求代理到在 http 上运行的不同机器(运行 node+socket.io 服务器)。
在 Apache 服务器上,我需要启用模块proxy
并proxy_http
在 apache 虚拟主机配置中添加这些指令:
ProxyPass /socket.io/ http://123.45.56.67/socket.io
ProxyPassReverse /socket.io/ http://123.45.56.67/socket.io
网上有很多资源,我只是不知道这个代理的事情。这就是这样做的方法。
推荐阅读
- excel - 如何将工作表从 Excel 文件添加到另一个文件?
- go - 使用 go get 检查是否有新版本的基于 go 的二进制文件可用
- marie - 玛丽模拟器分数乘法
- c# - 编辑并继续不适用于 Roslyn 编译的类库
- javascript - 选择恢复默认值的方法
- flutter - 'List 类型的值
' 不能分配给类型为 'Iterable 的变量 ' - python - 如何从接受输入更改为检查列表中的输入?
- python - 如何在我的 CSV 文件中打印用户设置的两个日期之间的数据?
- javascript - 拒绝应用来自 'http://localhost:3000/style.css' 的样式,因为它的 MIME 类型('text/html')
- java - 从 Angular 应用程序检索访问令牌后尝试在 Java 中调用 Microsoft Graph API