我需要从HTTP切换到HTTPS才能使用getUsermedia进行webrtc实现。我已在我的Apache 2.2.22版本上安装了证书并使其正常运行。
在网站中,我使用了主机NodeJS。也许不是理想的设置,但是当客户端上的socket.io想要与NodeJS服务器通信时,我遇到了问题。
在控制台中显示以下消息:
GET https://mydomain.nl:1900/socket.io/?EIO=3&transport=polling&t=1449219985177-166 net::ERR_CONNECTION_CLOSED
对我来说很明显,NodeJS服务器应用程序无法通过HTTPS处理请求,因为它是一个HTTP服务器。
我想改变该服务器,以便能够使用已在apache网络服务器上安装的SSL来提供HTTPS请求。
这有可能吗?
答案 0 :(得分:14)
我建议看看apache的mod_proxy。这将允许您通过apache SSL管道运行外部请求。 node.js只能在没有ssl支持的localhost接口上运行,因为它是apache的代理服务器。我你配置一个vhost,它看起来像这样:
<VirtualHost *:443>
ServerName www.yourserver.com
DocumentRoot /var/www/vhosts/www.yourserver.com/public_html
CustomLog <LOG-PATH> combined
ErrorLog <ERROR-LOG-PATH>
# Example SSL configuration
SSLEngine on
SSLProtocol all -SSLv2
SSLCipherSuite HIGH:MEDIUM:!aNULL:!MD5
SSLCertificateFile "<CERT-PATH>/server.crt"
SSLCertificateKeyFile "<CERT-PATH>/server.key"
ProxyPass /<PATH>/ http://localhost:1900/
ProxyPassReverse /<PATH>/ http://myserver:1900/
</VirtualHost>
您的请求将如下所示:
GET https://mydomain.nl/<PATH>/?....
<PATH>
的值与vhost config的<ProxyPass>
指令中的值相同。
答案 1 :(得分:2)
通过创建一个单独的Vhost作为Node js的代理来解决它。将其命名为socket.mydomain.nl,一切正常
答案 2 :(得分:1)
代理nodejs
var proxy = require('http-proxy').createProxyServer();
var fs = require('fs');
express = require('express.io');
app = express();
var SSloptions = {
key: fs.readFileSync('/var/www/node/certificados/mig.xxx.key'),
cert: fs.readFileSync('/var/www/node/certificados/xxx.crt'),
ca: [
fs.readFileSync('/var/www/node/certificados/gd_bundle-xx.crt')
],
rejectUnauthorized: false,
requestCert: true,
agent: false,
strictSSL: false
};
app.https(SSloptions).io();
app.all('*', function(req, res){
proxy.web(req, res, {
target: 'http://localhost:4443',
});
});
app.listen(14443);