繁体   English   中英

如何在 443 中为 apache AND 节点配置 https 支持?

[英]How to configure https support in 443 for apache AND node?

实际状态:

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?

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

也就是说,执行此操作的正确方法是让 Apache 侦听 443,然后使用 mod_proxy 将流量转发到 HTTP 端口上的 nodejs(不带 SSL,但您只是在 localhost 上交谈)或在 unix 上插座。

如何使用端口 80/HTTP 做到这一点的一个很好的例子在这里: http : //blog.podrezo.com/making-node-js-work-with-apache/

<VirtualHost *:80>
  ServerName pastebin.mydomain.com
  ServerAlias www.pastebin.mydomain.com
  DocumentRoot /var/www/pastebinjs/
  Options -Indexes
  ErrorDocument 503 /maintenance.html

  ProxyRequests on
  ProxyPass /maintenance.html !
  ProxyPass / http://localhost:8000/
</VirtualHost>

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

您的节点 HTTPS 服务器可以在任何端口上运行 - 假设是 9090 而不是您设置的 443。 使用 Apache 将https://example.com 中的任何流量重定向到侦听 9090 的节点 https 服务器。

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

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

Apache 可以配置使用 mod_proxy,nodejs 也有代理配置,并且有专门用于这个工作的外部程序。

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

这样一来,apache 和 nodejs 就可以保持不变——除了修改监听端口——而且 haproxy 对访问控制列表是透明和灵活的。 您可以将 ssl 用于所有 *443 端口。

实际上不需要在节点服务器中导入 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 apache http:好的!

https://www.example.com/mypage apache https:好的!

http://www.example.com/api/节点 http:好的!

https://www.example.com/api/节点 https: IT WORKKS !!!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM