我将ELB配置为同时打开80和443,其中443配置了SSL。两个 ELB 端口都指向实例的 80 端口。ELB 的 heatlh 检查使用 ping 目标 HTTP:80/index.html。它曾经可以工作,直到我最近决定开始将 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.xxxx/inde.html不可用。
但是 index.html 的位置就在 {domain}/ 下。
我认为我重定向的方式可能是错误的 - 但我不知道如何解决它。