HAPI JS Node js создает https-сервер

Как создать сервер hapi http и https, прослушивая как 80, так и 443 с той же маршрутизацией?

(Мне нужен сервер, который должен запускаться как на http, так и на https с тем же API)

Ответ 1

@codelion дал хороший ответ, но если вы все еще хотите прослушивать несколько портов, вы можете передать несколько конфигураций для соединений.

var server = new Hapi.Server();
server.connection({ port: 80, /*other opts here */});
server.connection({ port: 8080, /*other opts, incl. ssh */  });

Но еще раз отметить, было бы неплохо начать обесценивать http-соединения. Google и другие вскоре начнут отмечать их неуверенность. Кроме того, было бы неплохо фактически обрабатывать SSL с помощью nginx или что-то, а не в самом приложении node.

Ответ 2

Возможно, не так просто обращаться с запросами https непосредственно в приложении, но Hapi.js может обрабатывать как http, так и https внутри одного API.

var Hapi = require('hapi');
var server = new Hapi.Server();

var fs = require('fs');

var tls = {
  key: fs.readFileSync('/etc/letsencrypt/live/example.com/privkey.pem'),
  cert: fs.readFileSync('/etc/letsencrypt/live/example.com/cert.pem')
};

server.connection({address: '0.0.0.0', port: 443, tls: tls });
server.connection({address: '0.0.0.0', port: 80 });

server.route({
    method: 'GET',
    path: '/',
    handler: function (request, reply) {
        reply('Hello, world!');
    }
});

server.start(function () {
    console.log('Server running');
});

Ответ 3

Вместо этого вы можете перенаправить все HTTP-запросы на https:

if (request.headers['x-forwarded-proto'] === 'http') {
  return reply()
    .redirect('https://' + request.headers.host + request.url.path)
    .code(301);
}

Подробнее о https://github.com/bendrucker/hapi-require-https.

Ответ 4

Посетить ссылку: http://cronj.com/blog/hapi-mongoose

Вот примерный проект, который может помочь вам в этом.

Для версии hapi раньше 8.x

var server = Hapi.createServer(host, port, {
    cors: true
});

server.start(function() {
    console.log('Server started ', server.info.uri);
});

Для новой версии hapi

var Hapi = require('hapi');

var server = new Hapi.Server();
server.connection({ port: app.config.server.port });

Ответ 5

Вы также можете использовать local-ssl-proxy пакет npm для прокси-сервера локальной HTTPS-HTTP. Только для локального развития.

Ответ 6

Я искал что-то вроде этого и обнаружил https://github.com/DylanPiercey/auto-sni, который имеет пример использования с Express, Koa, Hapi (untested)

В основном это основано на сертификатах letencrypt и загрузке сервера hapi с помощью пользовательского прослушивателя.

Еще не пробовал.