私は、http://localhost:8088 で実行されている EC2 インスタンス上の AWS で実行されている IIS Web サイトを持っています。これは、EC2 インスタンスが実行されているターゲット グループにすべての HTTPS トラフィックを送信する ELB の背後にあるため、http://my-dns-name へのリクエストは ELB によって https://my-dns-name に再ルーティングされ、その後ターゲット グループに送信されます。ターゲット グループには、エンド/healthcheck
ポイントで 200 OK 応答をチェックするヘルス チェックが定義されており、エンドポイントは認証されていないリクエスト (匿名) を許可するように構成されています。
アプリケーション自体は正常に動作していますが、ヘルスチェックエンドポイントから応答コード 302 を受信しているため、AWS はターゲットグループが正常でないと報告しています。デスクトップから直接 (PowerShell などを使用して) エンドポイントをクエリすると、Invoke-WebRequest
期待どおりの応答が返されます200 OK
。EC2 インスタンスにリモート接続して同じクエリを実行すると、期待どおりの200 OK
応答が返されます。
$> Invoke-WebRequest -Uri https://my-dns-name/healthcheck -Method GET
StatusCode : 200
StatusDescription : OK
Content : {}
RawContent : HTTP/1.1 200 OK
しかし、 のローカル アドレスを使用するように変更するとhttp://localhost:8088
、クエリは失敗します。
$> Invoke-WebRequest -Uri http://localhost:8088/healthcheck -Method GET
Invoke-WebRequest : Unable to connect to the remote server
At line:1 char:1
+ Invoke-WebRequest -Uri http://localhost:8088/healthcheck -Method GET
ターゲット グループが 302 リダイレクトを取得しているのに、直接クエリを実行すると 200 OK が返される理由について何か考えはありますか (ローカル アドレスを使用しない限り)?
答え1
申し訳ありませんが、これはアプリケーションのコーディングの問題でした。RequireHttps
アプリケーションの起動コードの奥深くにフィルターが埋め込まれており、明らかにバックグラウンドでリダイレクトを試みていました。AWS は HTTP を使用して Web サイトをチェックしていたため、302 リダイレクトが発生していましたが、外部でチェックしていたときは HTTPS 経由でアクセスしていたため、リダイレクトはトリガーされませんでした。
答え2
ここで確認すべき点がいくつかあります:
- Windows ファイアウォールが実行中で、ポート 8088 がブロックされていますか?
- IIS は実際に 8088 でリッスンしていますか?
- AWS TG は 8088 でヘルスチェックを実行するように設定されていますか? https で 200 OK 応答が返されたことから、ポート 443 で実行されているようです。