HAPI JS Node js 创建 https 服务器
HAPI JS Node js creating https server
我如何创建一个 hapi http
和 https
服务器,使用相同的路由侦听 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);
}
@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()
实例
我如何创建一个 hapi http
和 https
服务器,使用相同的路由侦听 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);
}
@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()