Как создать сервер hapi http
и https
, прослушивая как 80, так и 443 с той же маршрутизацией?
(Мне нужен сервер, который должен запускаться как на http, так и на https с тем же API)
Как создать сервер hapi http
и https
, прослушивая как 80, так и 443 с той же маршрутизацией?
(Мне нужен сервер, который должен запускаться как на http, так и на https с тем же API)
@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.
Возможно, не так просто обращаться с запросами 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');
});
Вместо этого вы можете перенаправить все 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.
Посетить ссылку: 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 });
Вы также можете использовать local-ssl-proxy пакет npm для прокси-сервера локальной HTTPS-HTTP. Только для локального развития.
Я искал что-то вроде этого и обнаружил https://github.com/DylanPiercey/auto-sni, который имеет пример использования с Express, Koa, Hapi (untested)
В основном это основано на сертификатах letencrypt и загрузке сервера hapi с помощью пользовательского прослушивателя.
Еще не пробовал.