-1

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の場所です。

私がリダイレクトする方法は間違っているかもしれないと思いますが、どうやって解決するかわかりません。

答えて

0

負荷バランサのヘルスチェック要求には、クライアントから転送されていないためロードバランサから直接送信されるため、x-forwarded-protoヘッダーはありません。リダイレクトを行う前に、ヘッダーが最初に存在するかどうかを確認する必要があります。

また、SSL設定について少し混乱しています。 Load BalancerでSSL終了を行いますが、EC2サーバーでSSL証明書を提供していますか? 「両方のELBポートがインスタンスの80ポートを指している」と言うと、EC2サーバーでSSL証明書を提供していないため、健康チェックのURLはhttpsではなくhttpになります。

はまた、右のリダイレクトの前に持っているこの行は全く何も達成していない:

res.set('X-Forwarded-Proto', 'https'); 
+0

私はこのようなヘッダを持つすべての要求を設定しますと思いましたか?このヘッダーを持たないリクエストだけがこの行に入りますので、 – jamesdeath123

+0

SSLに関して - 現在、http:// {domain}とhttps:// {domain}は両方とも動作します。 http:{domain}には保護されていないということだけです。 SSLはELB上で行われ、最終的にEC2のポート80へのすべての要求を指し示します。 – jamesdeath123

+0

'x-forwarded-proto'ヘッダの全ポイントは、ロードバランサがそれを設定させることです。なぜそれをサーバー上でオーバーライドしたいのですか?リダイレクトを発行する直前にリクエストに設定することで、リクエストが破棄されるため、何も成立しません。 –

1

私のソリューションは、従来のリダイレクトに健康APIのルートを確認するためでした。/APIにAWSのロードバランサ上

  1. の設定ヘルスチェック/健康
  2. 追加条件

if (config.env === 'prod' && req.get('X-Forwarded-Proto') !== 'https' && req.url !== '/api/health') { // redirect }

関連する問題