我花了两天时间。希望有人有答案。
我有一个在端口443上运行SSL的apache服务器。 我有一个在端口8081上运行SSL的node.js服务器。
在客户端中,我试图包含socket.io/socket.io.js文件,如下所示:
<script src="https://my_url.com:8081/socket.io/socket.io.js"></script>
我没有得到404(未找到)。在Chrome javascript控制台中,我获得Status =(失败)和Type = undefined。我已经尝试了我发现的建议(使用src =“localhost ..”等,但它们也不起作用。)
适用于我的http版本。我包括这样的文件:
<script src="http://my_url.com:8080/socket.io/socket.io.js"></script>
不确定为什么SSL版本无效。有任何想法吗?在此先感谢!!
答案 0 :(得分:0)
从你的评论中我猜你有一个CORS问题:
http://en.wikipedia.org/wiki/Cross-origin_resource_sharing
如果更改协议1,则原始策略后的原点不同。你必须包含一个标题。
关于不安全内容的警告是一个暗示导致问题的原因:您试图通过脚本访问原点,而脚本不是脚本的来源。这是一个安全问题,因为它可能会泄漏,从而允许将有害脚本注入页面
答案 1 :(得分:0)
不要将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>
现在,Nodejs也可以拥有SSL:
var express = require('express');
var connect = require('connect');
var app = express();
var fs = require('fs');
var ssl_options = {
key: fs.readFileSync('/etc/ssl/private/domain.com.key'),
cert: fs.readFileSync('/etc/ssl/certs/domain.com.crt'),
ca: fs.readFileSync('/etc/ssl/certs/domain.com.ca')
};
var server = require('https').createServer(ssl_options, app);
var port = process.env.PORT || 3000;
var io = require('socket.io')(server);
server.listen(port, function(err) {
console.log(colors.green('https server running on port ' + port));
});
在您的客户端执行此操作:
var socket = io.connect('https://domain.com:3000', { path: '/socket.io', 'flash policy port': 3000 });
对我来说,这很好用!