ターゲットグループのヘルスチェックで '#' を含むパスを指定した際に失敗する原因と対処方法
困っていること
Application Load Balancer (ALB) のターゲットグループにおいて、ヘルスチェックパス /#/login/
の設定でヘルスチェックが失敗してしまいます。
解決方法を教えてください。
前提条件
- Webサーバ:Apache HTTP Server
- ファイル構成:/#/login/配下にindex.htmlが存在
- ターゲットのセキュリティグループ:ALBからのトラフィックを許可
原因
本事象の原因は、'#'文字がWebサーバーで正しく解釈されないことにあります。
ヘルスチェックのリクエストパスに含まれる '#' が Webサーバー側で解釈できず、Bad Request エラーが発生していると考えられます。
解決方法
解決するには、ヘルスチェックパスの '#' をエンコードされた文字列 '%23' に変更します。
具体的には、ターゲットグループのヘルスチェックパスの/#/login/
を /%23/login/
に変更します。
変更前
以下の手順を実施します。
- ターゲットグループの[ヘルスチェック]のうち、[編集]を選択します
- ヘルスチェックパスの '#' を '%23' に変更します
- 変更前:
/#/login/
- 変更後:
/%23/login/
- 変更前:
- 設定を保存します
変更後
これによって、'#'を含むヘルスチェックパスの問題が解決し、ヘルスチェックが成功します。
補足情報
- URLエンコードについて
- URLで特殊な意味を持つ文字(#, ?, &など)は、%に続く2桁の16進数でエンコードする必要があります。例えば、'#'は'%23'としてエンコードされます。