我配置了ELB以打開80和443,其中443配置了SSL。兩個ELB端口指向實例的80端口。 ELB的heatlh檢查使用ping目標HTTP:80/index.html。它曾經工作,直到我最近決定開始將http重定向到https。AWSJ後面的NodeJS將http重定向到https失敗的健康檢查
現在下面的代碼是在server.js(內//我是新加入的代碼的代碼):
//
app.use(function(req, res, next) {
if (config.env === 'prod' && req.get('X-Forwarded-Proto') !== 'https') {
console.log("redirecting")
console.log('https://' + req.get('Host') + req.url)
res.set('X-Forwarded-Proto', 'https');
res.redirect('https://' + req.get('Host') + req.url);
}
else
next();
});
//
app.use(express.static(path.join(__dirname, 'home')));
app.set('trust proxy'); // enable this to trust the proxy
app.listen(app.get('port'), function() {
console.log('Express server listening on port ' + app.get('port'));
});
app.get("/*", function(req, res, next) {
res.sendFile(path.join(__dirname, 'home/index.html'));
});
我認爲上述要求將重定向所有請求到服務器ELB但以https協議。
但是服務器啓動打印:
redirecting
https://10.x.x.xx/index.html
然後是ELB未能爲https://10.x.x.xx/inde.html不可用。
但是index.html的位置正好在{domain} /下。
我認爲我重定向的方式可能是錯誤的 - 但我不知道如何解決它。
我認爲這將設置這樣的標題所有要求?由於只有沒有這個頭部的請求才會進入這一行? – jamesdeath123
關於SSL - 目前,http:// {域}和https:// {域}都將工作;只有http:{域}纔會有保護。 SSL在ELB上完成,最終將所有請求指向EC2的端口80. – jamesdeath123
「x-forwarded-proto」頭文件的全部內容是讓負載平衡器設置它。你爲什麼要在服務器上覆蓋它?並且在發出重定向之前通過將請求設置爲請求,因爲該請求隨後被丟棄,因此不會執行任何操作。 –