2017-04-24 11 views
3

私は80と443ポートで動作するアプリケーションを持っています。ユーザーがhttpバージョンのアプリケーションを起動すると、HTTPSにリダイレクトされます。私はこれを行うには、以下のコードを試してみました。アプリが起動したときに、私はlocalhostのをヒットした場合ノードと角度2のアプリケーションでのHTTPからHTTPSへのリダイレクト

function handleRedirects(req, res, next) { 
    if (!req.secure) { 
     return res.redirect('https://' + req.get('host') + req.url); 
    } 
    next(); 
} 

app.use(handleRedirects); 

https.createServer(credentials, app).listen(443, function() { 
    console.log('App is running on port 443'); 
}); 

// all other routes are handled by Angular 
app.get('/*', function(req, res) { 
    console.log("Default handler\n\n\n\n") 
    res.sendFile(path.join(__dirname, '/../../dist/index.html')); 
}); 

app.listen(80, function() { 
    logger.info('App is running on port 80'); 
    admins.refresh(); 
}); 

はそう、それはhttps://localhostにリダイレクトされるはずです。しかし、期待どおりに動作しません。 コードで何が間違っていますか。私は言いましたHTTPS redirection for all routes node.js/express - Security concerns

答えて

1

以下のコードは私の問題を解決しました。

var app = express(); 
app.get('/refresh', function (req, res) { 
    res.send(200); 
}); 
https.createServer(credentials, app).listen(443, function() { 
    console.log('App is running on port 443'); 
}); 


var http = express(); 

http.get('/', function (req, res) { 
    res.redirect('https://' + req.get('host') + req.url); 
}) 
http.listen(80, function() { 
    logger.info('App is running on port 80'); 
}); 
1

プロダクション環境でのみリダイレクトされるようにhttpsを設定します。私のサイトで使用するコードは次のとおりです。

module.exports.httpsRedirect = function(req,res,next){ 
if(req.headers['x-forwarded-proto'] != 'https' && process.env.NODE_ENV === 'production') 
    res.redirect('https://'+req.hostname+req.url) 
else 
    next() /* Continue to other routes if we're not redirecting */ 
}; 
関連する問題