ELBが80と443を開くように設定しました。ここで443はSSLで設定されています。どちらのELBポートもインスタンスの80ポートを指しています。 ELBのヒートチェックでは、pingターゲットHTTP:80/index.htmlを使用しています。私は最近、httpをhttpsにリダイレクトすることを決定するまで、以前から働いていました。AWSの背後にあるNodeJS ELBを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
そしてhttps://10.x.x.xx/inde.htmlが利用できないとして、その後ELBが失敗しています。
{domain} /の直下のindex.htmlの場所です。
私がリダイレクトする方法は間違っているかもしれないと思いますが、どうやって解決するかわかりません。
私はこのようなヘッダを持つすべての要求を設定しますと思いましたか?このヘッダーを持たないリクエストだけがこの行に入りますので、 – jamesdeath123
SSLに関して - 現在、http:// {domain}とhttps:// {domain}は両方とも動作します。 http:{domain}には保護されていないということだけです。 SSLはELB上で行われ、最終的にEC2のポート80へのすべての要求を指し示します。 – jamesdeath123
'x-forwarded-proto'ヘッダの全ポイントは、ロードバランサがそれを設定させることです。なぜそれをサーバー上でオーバーライドしたいのですか?リダイレクトを発行する直前にリクエストに設定することで、リクエストが破棄されるため、何も成立しません。 –