Websocket apache与ssl的代理问题

时间:2016-01-12 18:19:52

标签: node.js html5 ssl websocket socket.io

所以我有一个使用https和websockets以及socket.io(带有node.js)的站点。 websocket最初会尝试直接连接

var socket = io('https://' + socket_ip_addr + ":8443",{'forceNew': true, 'secure': true});

这是我的socket.io代码(直接连接正常工作)

var http = require('https')
var fs = require('fs');

var options = {
    key:    fs.readFileSync('../certs/ssl.key'),
    cert:   fs.readFileSync('../certs/ssl.crt'),
};
var app = http.createServer(options)
var io = require('socket.io').listen(app);
app.listen(8443);

这很好用,但是有些用户可能会因为某种原因而阻塞随机端口,所以我有一个回退方法试图将端口443与apache代理一起使用。

var socket = io('https://' + socket_ip_addr,{'forceNew': true, 'secure': true});

apache设置:

<VirtualHost *:443>
    ServerName somewebsite.ca
    ServerAlias somewebsite.ca
    DocumentRoot /var/www/html

    SSLEngine on
    SSLCertificateFile ../certs/ssl.crt
    SSLCertificateKeyFile ../certs/ssl.key

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

    ProxyRequests off
    ProxyPass /socket.io/ https://localhost:8443/socket.io/
    ProxyPassReverse /socket.io/ https://localhost:8443/socket.io/
</VirtualHost>

在我切换到https之前,我曾经这样做过,一切正常。现在,我正在尝试使用https和wss,它给了我很好的ol&#39;错误500(内部服务器错误)

我真正的问题是:我怎么开始尝试调试出错的地方。我能以某种方式看一些标题吗?我可以在中间步骤的某处打印一些消息吗?

感谢。

1 个答案:

答案 0 :(得分:1)

好吧..我只是愚蠢。我检查了apache日志并添加了一些额外的命令,现在它工作正常。其他事项包括:

SSLProxyEngine on //apache log told me about this
SSLProxyVerify none
SSLProxyCheckPeerCN off
SSLProxyCheckPeerName off
SSLProxyCheckPeerExpire off
RequestHeader set Front-End-Https "On"