Node.js 如何在443中为apache和node配置https支持?

Node.js 如何在443中为apache和node配置https支持?,node.js,apache,ssl,https,reverse-proxy,Node.js,Apache,Ssl,Https,Reverse Proxy,实际状态: apachehttp:OK apachehttps:OK 节点http:好的 节点https:不工作(仍然) 我已尝试将节点程序修改为 var express = require('express'); var app = express(); var https = require('https'); var fs = require('fs'); var server = http.createServer(app); https.createServer({

实际状态:

apachehttp:OK
apachehttps:OK

节点http:好的
节点https:不工作(仍然)

我已尝试将节点程序修改为

var express = require('express');
var app = express();
var https = require('https');
var fs = require('fs');

var server = http.createServer(app);

https.createServer({ 
        key: fs.readFileSync("/etc/letsencrypt/live/www.example.com/privkey.pem"),
        cert: fs.readFileSync("/etc/letsencrypt/live/www.example.com/fullchain.pem"),
        ca: fs.readFileSync("/etc/letsencrypt/live/www.example.com/chain.pem")
}, app).listen(443);
这里明显的问题是apache已经在监听端口443,然后

Error: listen EADDRINUSE :::443

有没有一种方法可以使用Apache443为节点提供SSL服务

您只能将一个进程绑定到服务器上的给定端口

也就是说,正确的方法是让Apache监听443,然后使用mod_proxy将流量转发到HTTP端口(不是w/SSL,但您只在本地主机上交谈)或unix套接字上的NodeJ

关于如何使用端口80/HTTP执行此操作的一个很好的示例如下:


ServerName pastebin.mydomain.com
ServerAlias www.pastebin.mydomain.com
DocumentRoot/var/www/pastebinjs/
选项-索引
错误文档503/maintenance.html
代理请求
ProxyPass/maintenance.html!
ProxyPass/http://localhost:8000/

但是,如果将代理*行添加到现有HTTPS端点,则理论是相同的

您的节点HTTPS服务器可以在任何端口上运行—比方说9090而不是您设置的443。使用Apache重定向进入9090上侦听的节点https服务器的任何流量


查看apache反向代理以了解有关如何设置的更多信息:)

要在端口443上有两台服务器,apache和node.js,常见的解决方案是使用反向代理

Apache可以配置为使用mod_代理,nodejs也有代理配置,并且有专门用于此作业的外部程序

我建议使用haproxy监听端口80和443,并制定必要的规则将请求转发到您选择的服务器。 然后,apache可以监听6080和6443,node可以监听8080和8443


这样一来,apache和NodeJ就可以完全不受影响了——除了修改监听端口之外——而haproxy对于访问控制列表是透明和灵活的。您可以对所有*443端口使用ssl

实际上不需要在节点服务器中导入SSL文件或密钥。(按照我的步骤在SSL中运行apache和节点服务器)。希望您已经在Apache服务器中配置了SSL

节点(快车)

在服务器中打开httpd.conf,并根据需要添加ProxyPass

ProxyPass /api/ http://localhost:3000/
不要忘记重新启动HTTP服务

apachehttp:好的

阿帕奇:好的

节点http:好的


节点https:它工作正常

这会进入httpd.conf文件吗@Paul@FabricioG可以,但通常我建议使用站点级别的.conf文件,并使用Include指令将其包含在httpd.conf中。
const express = require('express');
const app = express();
var cors = require('cors')
app.use(cors());
var server = require('http').createServer(app);
ProxyPass /api/ http://localhost:3000/