实际状态:
http://www.example.com/mypage apache http:好的!
https://www.example.com/mypage apache https:好的!
http://www.example.com:8000 节点http:好的!
https://www.example.com:8000 节点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
有没有办法使用Apache 443为节点提供SSL?
答案 0 :(得分:5)
您只能将一个进程绑定到服务器上的给定端口。
也就是说,正确这样做的方法是让Apache监听443,然后使用mod_proxy将流量转发到nodejs上的HTTP端口(不是w / SSL,但是你&# 39;只能通过localhost进行通信)或在unix套接字上进行通信。
如何使用端口80 / HTTP执行此操作的一个很好的示例如下:http://blog.podrezo.com/making-node-js-work-with-apache/
<footer class"footer">
//content
</footer>
.footer {
position: absolute;
bottom: 0;
}
但是如果将Proxy *行添加到现有的HTTPS端点,理论是相同的。
答案 1 :(得分:1)
您的节点HTTPS服务器可以在任何端口上运行 - 假设9090而不是您设置的443。使用Apache将https://example.com中的任何流量重定向到侦听9090的节点https服务器。
查看apache反向代理以获取有关如何设置它的更多信息:)
答案 2 :(得分:0)
要在端口443上运行两个服务器Apache和node.js,常见的解决方案是使用反向代理。
Apache可以配置为使用mod_proxy,nodejs也有代理配置,并且有专门用于此工作的外部程序。
我建议使用haproxy来侦听端口80和443,并制定必要的规则以将请求转发到您选择的服务器。 然后,apache可以在6080和6443上收听,节点可以在8080和8443上收听。
这样,apache和nodejs可以相当不受影响 - 除了修改监听端口 - 并且haproxy是透明的,并且具有访问控制列表的灵活性。您可以将ssl用于所有* 443端口。
答案 3 :(得分:0)
实际上,无需在节点服务器中导入SSL文件或密钥。 (按照我的步骤在SSL中同时运行apache和节点服务器)。希望您已经在 Apache 服务器
中配置了SSL节点(快速)
const express = require('express');
const app = express();
var cors = require('cors')
app.use(cors());
var server = require('http').createServer(app);
在服务器中打开 httpd.conf 并根据需要添加 ProxyPass 行
ProxyPass /api/ http://localhost:3000/
不要担心重新启动HTTP服务
http://www.example.com/mypage阿帕奇http:好!
https://www.example.com/mypage Apache https:好的!
http://www.example.com/api/节点http:好!
https://www.example.com/api/节点https:IT工作!!!