Node.js 基于SSL的Apache和NodeJS

Node.js 基于SSL的Apache和NodeJS,node.js,apache,ssl-certificate,Node.js,Apache,Ssl Certificate,我需要从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-1

我需要从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 Web服务器上已有的SSL来服务HTTPS请求


这可能吗?

我建议看看apache的。这将允许您通过apachessl管道运行外部请求。node.js只能在localhost接口上运行,而不支持ssl,因为它是由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>/?.... 

服务器名www.yourserver.com
DocumentRoot/var/www/vhosts/www.yourserver.com/public_html
自定义日志组合
错误日志
#SSL配置示例
斯伦金安
SSLProtocol all-SSLv2
SSLCipherSuite高:中:!阿努尔:!MD5
SSLCertificateFile“/server.crt”
SSLCertificateKeyFile“/server.key”
ProxyPass//http://localhost:1900/
ProxyPassReverse//http://myserver:1900/
您的reguest将如下所示:

<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>/?.... 
GEThttps://mydomain.nl//?.... 

其中
的值与vhost配置的
指令中的值相同

通过创建一个单独的Vhost作为节点js的代理解决了这个问题。将其命名为socket.mydomain.nl,一切正常

代理节点

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);

好的,当添加proxyPass和ProxyPassReverse时,我得到以下错误:无法启动apache:启动web服务器:apache2Syntax错误位于/etc/apache2/sites enabled/webmin.1446455161.conf的第15行:无效命令“proxyPass”,可能拼写错误或由服务器配置操作“start”中未包含的模块定义失败。Apache错误日志可能包含更多信息。失败!是否应该保留节点js服务器的位置,如/var/www/socketserver?请运行
apachectl configtest
并发布输出。其次,请发送您的vhost.conf(匿名)
将成为URL的一部分。e、 g.:
ProxyPass/nodejs/http://localhost:1900/
将导致URL:
https://myserver.nl/nodejs
输出将被重定向到
localhost:1900
同时检查是否安装并启用了
mod_proxy
。DocumentRoot/var/www/NEWchat允许从所有选项+索引ServerName chat.mydomain Alias/上传/var/uploads ErrorLog/var/transonlylog/log.log日志级别emerg SSLEngine在SSLCertificateFile/etc/letsencrypt/live/chat.mydomain/chat.mydomain/pem SSLCertificateKeyFile/etc/letsencrypt/live/chat.mydomain/chain.pem ProxyPass/var/www/TO Socket/ProxyPass/reverse/var/www/TO Socket/Yes,已安装。必须运行a2enmod proxy_http,我在这里搜索: