Websocket apache 代理问题与 ssl
Websocket apache proxy issues with ssl
所以我有一个网站使用 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/ [P,L]
ProxyRequests off
ProxyPass /socket.io/ https://localhost:8443/socket.io/
ProxyPassReverse /socket.io/ https://localhost:8443/socket.io/
</VirtualHost>
在切换到 https 之前,我曾经这样做过,一切正常。现在我正在尝试使用 https 和 wss 来完成它,它给了我很好的错误 500(内部服务器错误)
我真正的问题是:我如何开始尝试调试出错的地方。我可以看看一些 headers 吗?我可以在中间步骤的某处打印一些消息吗?
谢谢。
好吧..我只是愚蠢。我检查了 apache 日志并添加了一些额外的命令,现在它工作正常。其他内容包括:
SSLProxyEngine on //apache log told me about this
SSLProxyVerify none
SSLProxyCheckPeerCN off
SSLProxyCheckPeerName off
SSLProxyCheckPeerExpire off
RequestHeader set Front-End-Https "On"
所以我有一个网站使用 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/ [P,L]
ProxyRequests off
ProxyPass /socket.io/ https://localhost:8443/socket.io/
ProxyPassReverse /socket.io/ https://localhost:8443/socket.io/
</VirtualHost>
在切换到 https 之前,我曾经这样做过,一切正常。现在我正在尝试使用 https 和 wss 来完成它,它给了我很好的错误 500(内部服务器错误)
我真正的问题是:我如何开始尝试调试出错的地方。我可以看看一些 headers 吗?我可以在中间步骤的某处打印一些消息吗?
谢谢。
好吧..我只是愚蠢。我检查了 apache 日志并添加了一些额外的命令,现在它工作正常。其他内容包括:
SSLProxyEngine on //apache log told me about this
SSLProxyVerify none
SSLProxyCheckPeerCN off
SSLProxyCheckPeerName off
SSLProxyCheckPeerExpire off
RequestHeader set Front-End-Https "On"