【问题标题】:How to configure https support in 443 for apache AND node?如何在 443 中为 apache AND 节点配置 https 支持?
【发布时间】:2018-07-03 21:16:49
【问题描述】:

实际状态:

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

http://www.example.com:8000 node http:好的!
https://www.example.com:8000 node 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?

【问题讨论】:

    标签: node.js apache ssl https reverse-proxy


    【解决方案1】:

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

    也就是说,执行此操作的正确方法是让 Apache 在 443 上侦听,然后使用 mod_proxy 在 HTTP 端口(不是使用 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 端点,则理论是相同的。

    【讨论】:

    • 这会放在 httpd.conf 文件中吗? @保罗
    • @FabricioG 可以,但通常我建议使用站点级 .conf 文件并使用 Include 指令将其包含在 httpd.conf 中。
    • 此答案中提供的链接已损坏。
    【解决方案2】:

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

    查看 apache reverse-proxy 以获取有关如何设置的更多信息 :)

    【讨论】:

      【解决方案3】:

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

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

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

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

      【讨论】:

        【解决方案4】:

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

        https://www.example.com/mypageapache https:好的!

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

        https://www.example.com/api/ 节点 https:它工作了!!!

        【讨论】:

          猜你喜欢
          • 2012-10-20
          • 1970-01-01
          • 1970-01-01
          • 2023-02-25
          • 1970-01-01
          • 1970-01-01
          • 2015-09-25
          • 1970-01-01
          • 2015-02-17
          相关资源
          最近更新 更多