在Hapi.js中将httpredirect到https

我有我的hapi服务器的以下configuration

const server = new Hapi.Server(); const tls = { cert: fs.readFileSync(path.join(__dirname, '../certificates/cert.crt')), key: fs.readFileSync(path.join(__dirname, '../certificates/cert.key')), }; server.connection({ port: process.env.PORT_HTTP || 80, host: process.env.HOST || 'localhost', }); server.connection({ port: process.env.PORT_HTTPS || 443, host: process.env.HOST || 'localhost', tls, }); 

服务器在httphttps上运行正常,但我想redirect从httphttps所有stream量。

我应该怎么做,已经尝试注册hapi-require-https npm模块,但stream量仍然保持不变,没有任何反应。

为http请求创build一个额外的服务器并将它们绑定到redirect函数。

 var Hapi = require('hapi'); var http = new Hapi.Server(80); var server = new Hapi.Server(443, { tls: {} }); var redirect = function () { this.reply.redirect('https://your.site/' + this.params.path); }); http.route({ method: '*', path: '/{path*}', handler: redirect }); 

更新(其他选项)

 server.route({ method: 'GET', path: '/', handler: function (request, reply) { if(request.headers.referer.split(':')[0] == "http"){ this.reply.redirect('https://your.site' + this.params.path); } } }); 

这个怎么样? 绑定他们两个

 var http = new Hapi.Server(80); // our extra server http.route({ method: '*', path: '/{path*}', handler: function (request, reply) { // if(request.headers.referer.split(':')[0] == "http"){ this.reply.redirect('https://your.site' + this.params.path); // } } }); 

创build两个服务器实例分别处理http和httpsstream量。

 var Hapi = require('hapi'); var server = new Hapi.Server(80); var httpsServer = new Hapi.Server(443, { tls: { // your certificates here} }); 

现在将hapi-gate插件注册到基本服务器,以便将stream量redirect到https。

 server.register({ register: require('hapi-gate'), options: {https: true} // will force https on all requests }); 

您也可以使用hapi-require-https插件。