apachessl(443)node.jsssl(8081)。客户可以';找不到socket.io.js

apachessl(443)node.jsssl(8081)。客户可以';找不到socket.io.js,apache,node.js,ssl,amazon-web-services,socket.io,Apache,Node.js,Ssl,Amazon Web Services,Socket.io,我花了两天时间在这上面。希望有人能找到答案 我有一个apache服务器在端口443上运行SSL。 我有一个node.js服务器在端口8081上运行SSL 在客户端中,我尝试包括socket.io/socket.io.js文件,如下所示: <script src="https://my_url.com:8081/socket.io/socket.io.js"></script> 我没有404(找不到)。在ChromeJavaScript控制台中,我得到Status=(

我花了两天时间在这上面。希望有人能找到答案

我有一个apache服务器在端口443上运行SSL。 我有一个node.js服务器在端口8081上运行SSL

在客户端中,我尝试包括socket.io/socket.io.js文件,如下所示:

<script src="https://my_url.com:8081/socket.io/socket.io.js"></script>

我没有404(找不到)。在ChromeJavaScript控制台中,我得到Status=(失败)和Type=undefined。我尝试了我找到的建议(使用src=“localhost..”等,但它们也不起作用)

它适用于我的http版本。我包括如下文件:

<script src="http://my_url.com:8080/socket.io/socket.io.js"></script>


不确定SSL版本为何不工作。有什么想法吗?提前谢谢

根据您的评论,我猜您有CORS问题:

如果更改protocoll,则遵循相同的源策略,源不相同。您必须为此包含一个标题


关于不安全内容的警告暗示了问题的起因:您正试图通过脚本访问源,而该脚本不是该脚本的源。这是一个安全问题,因为它可能会提供一个漏洞,允许将有害脚本注入页面。不要将ProxyPass设置为Localhost!那不行

在Apache配置中执行此操作:

<VirtualHost *:443>
    ServerName domain.com
    SSLProxyEngine On
    RequestHeader set Front-End-Https "On"
    ProxyPass / https://domain.com:3000/ retry=1 acquire=3000 timeout=600 Keepalive=On
    ProxyPassReverse / https://domain.com:3000/

    SSLEngine on
    SSLCertificateKeyFile    /etc/ssl/private/domain.com.key
    SSLCertificateFile       /etc/ssl/certs/domain.com.crt
    SSLCertificateChainFile  /etc/ssl/certs/chaincert.crt
</VirtualHost>
在您的客户中,请执行以下操作:

var socket = io.connect('https://domain.com:3000', { path: '/socket.io', 'flash policy port': 3000 });

对我来说,这很好用

你能更详细地解释一下系统的架构吗?我不明白为什么你有两台服务器运行ssl,谁提供脚本。我正在使用apache为我的php页面提供登录等服务。然后应用程序页面包括所有脚本文件等。这就是我调用socket.io.js的地方。如果我不使用node.js ssl,那么我会收到警告“…提供了来自的不安全内容”。我无法让节点https服务器工作。但找到了另一个解决办法。我正在使用Amazon负载平衡器终止SSL并将http发送到节点服务器。它工作得很好。对于我的SSL Apache通信,我也会这样做。仅供参考-如果您选择此路线,则需要使用负载平衡器中的TCP(SSL)和TCP选项来处理节点流量。浏览器处理此问题的方式非常不同。有些加载脚本但不执行,有些向站点发送选项请求并拒绝加载脚本,我对此进行了调查。但是我不明白为什么我的http版本可以工作:my_url.com:8080/socket.io/socket.io.js“>。当我使用它时(当我的apache在端口80上运行,node.js在端口8080上运行),它可以工作。https是否有不同的源策略规则?看起来我的node.js ssl设置可能有问题。我只是尝试直接在浏览器中访问链接,并获取安全链接的ssl错误,但显示socket.io.js文件以显示不安全的。在这种情况下,您应该在此处发布node.js代码(只需编辑您的第一篇帖子),否则我无法追踪问题。一个好方法是在浏览器中使用开发人员工具并检查网络选项卡。例如,在Chrome F12中,然后是网络选项卡OK,谢谢。我想问题是我在节点端使用了自签名证书,而不是我购买并安装在apache服务器上的CA证书。我要ng以修复该问题,并查看问题是否仍然存在。
var socket = io.connect('https://domain.com:3000', { path: '/socket.io', 'flash policy port': 3000 });