HAPI JS Node js 创建 https 服务器

HAPI JS Node js creating https server

我如何创建一个 hapi httphttps 服务器,使用相同的路由侦听 80 和 443?

(我需要一个服务器,它应该使用完全相同的 API 在 http 和 https 上运行)

您可以将所有 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 了解更多详情。

@codelion 已经给出了很好的答案,但是如果你还想监听多个端口,你可以传递多个连接的配置。

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

但要再次注意,开始降低 http 连接数会很好。 Google 和其他人很快就会开始将它们标记为不安全。 此外,实际使用 nginx 或其他东西处理 SSL 可能是个好主意,而不是在节点应用程序本身上。

访问Link:http://cronj.com/blog/hapi-mongoose

这里是 a sample project 可以帮助你。

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 });

通常不直接在应用程序上处理 https 请求,但 Hapi.js 可以在同一个 API 中处理 http 和 https。

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');
});

您还可以使用 local-ssl-proxy npm package 将本地 HTTPS 代理到 HTTP。仅供本地开发。

我一直在寻找类似的东西,发现 https://github.com/DylanPiercey/auto-sni 它有一个使用 Express、Koa、Hapi 的示例(未测试)

它基本上基于 letsencrypt 证书并使用自定义侦听器加载 hapi 服务器。

还没试过

回复所选答案:这不再有效,在版本 17 中删除:

https://github.com/hapijs/hapi/issues/3572

你得到:

TypeError: server.connection is not a function

解决方法是使用代理或创建 2 个 Hapi.Server()

实例