1

我在这上面花了两天时间。希望有人给出答案。

我有一个在端口 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 = (failed) 和 Type = undefined。我已经尝试过我找到的建议(使用 src="localhost.." 等,但它们也不起作用)。

它适用于我的 http 版本。我包括这样的文件:

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

不知道为什么 SSL 版本不起作用。有任何想法吗?提前致谢!!

4

2 回答 2

0

从你的评论我猜你有一个CORS问题:

http://en.wikipedia.org/wiki/Cross-origin_resource_sharing

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

https://developer.mozilla.org/en-US/docs/JavaScript/Same_origin_policy_for_JavaScript?redirectlocale=en-US&redirectslug=Same_origin_policy_for_JavaScript

关于不安全内容的警告是导致问题的提示:您正在尝试通过不是脚本来源的脚本访问来源。这是一个安全问题,因为它可能会导致泄漏,从而允许将有害脚本注入页面

于 2013-02-20T19:31:34.090 回答
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 });

对我来说,这很好用!

于 2015-09-03T18:00:46.997 回答