在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, });
服务器在http
和https
上运行正常,但我想redirect从http
到https
所有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插件。