使用Bouncy路由https请求失败

时间:2019-07-30 08:48:08

标签: javascript node.js https

我们一直在使用Bouncy将传入的HTTP请求路由到不同的端点,并且效果很好。现在,我将所有域移至https,无法进行弹性工作。

下面是三个测试,前两个有效,最后一个无效

这有效:

const http = require('http');
const fs = require('fs');
const connect = require("connect");
const bouncy = require("bouncy");

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

const somedomain = Server("/var/www/somedomain", 8010);

bouncy(bouncer).listen(80);

function bouncer(req, bounce) {
    console.error("bouncer")
    switch (req.headers.host) {
        case "somedomain.com":
            console.log("bounce", req.headers.host);
            bounce(8010);
            break;
        default:
            bounce(8000);
            console.log(`Unknown host: ${req.headers.host}`);
    }
}

function Server(base_path, port) {
    const app = connect();

    app.use(function(req, res) {
        res.end('Hello from Connect!\n');
    });

    http.createServer(app).listen(port);

    return app
}

这不起作用:

const http = require('http');
const https = require('https');
const fs = require('fs');
const connect = require("connect");
const bouncy = require("bouncy");

const somedomain = Server("/var/www/somedomain", 8010);

bouncy(bouncer).listen(443);

function bouncer(req, bounce) {
    console.error("bouncer")
    switch (req.headers.host) {
        case "somedomain.com":
            console.log("bounce", req.headers.host);
            bounce(8010);
            break;
        default:
            bounce(8000);
            console.log(`Unknown host: ${req.headers.host}`);
    }
}

function Server(base_path, port) {
    const app_secure = connect();

    const options = {
        key: fs.readFileSync('/etc/letsencrypt/live/somedomain.com/privkey.pem'),
        cert: fs.readFileSync('/etc/letsencrypt/live/somedomain.com/fullchain.pem')
    };

    app_secure.use(function(req, res) {
        res.end('Hello from Connect!\n');
    });

    https.createServer(options, app_secure).listen(port);

    return app_secure
}

但是没有弹性的相同代码有效:

const http = require('http');
const https = require('https');
const fs = require('fs');
const connect      = require("connect");

const options = {
  key: fs.readFileSync('/etc/letsencrypt/live/somedomain.com/privkey.pem'),
  cert: fs.readFileSync('/etc/letsencrypt/live/somedomain.com/fullchain.pem')
};

const app_secure = connect();
app_secure.use(function(req, res) {
  res.end('Hello from Connect!\n');
});

https.createServer(options, app_secure).listen(443);

在以上任何示例中我都没有收到任何错误消息。在端口443上有弹性的情况下,不会记录console.error,因此保镖功能似乎未运行。浏览器消息是服务器意外关闭了连接。

0 个答案:

没有答案