15
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【rails】ALB のヘルスチェックが失敗する “Health checks failed with these codes:301”

Posted at

はじめに

AWSのALBでヘルスチェックが通らない問題に直面しました。

エラー画面は下記の通り。

スクリーンショット 2025-01-21 11.20.15.png

ヘルスチェックの対象となるエンドポイントが HTTP 301 リダイレクト を返していることを示しています。

詰まっていた原因

HTTP接続でヘルスチェックを行おうとしているのにrails側ですべてのリクエストを HTTPS に強制的にリダイレクトさせる設定になっていたことが原因でしした。

そのため、HTTP でのリクエストが送られてきた場合、自動的に HTTPS にリダイレクトする機能をOFFにしました。
具体的には下記の通り。

config/environments/production.rb
config.force_ssl = false

他にやったこと

VPC 設定で DNS 解決 と DNS ホスト名 が有効になっていること

まず、VPCを作成すると、デフォルトではDNS 解決のみ『有効』になっており、DNS ホスト名は『無効』になっています。
ですので、DNS ホスト名を有効にする必要があります。

ちなみに、DNS ホスト名を有効にすることでEC2 インスタンスにホスト名 (DNS 名(例: ec2-xx-xx-xx-xx.ap-northeast-1.compute.amazonaws.com))が割り当てられます。
名前解決を行ってくれるので、名前(DNS名)でインターネットからアクセス可能になったりSSH接続やHTTPリクエストに便利になります。

エンドポイントの設定

config/routes.rb
Rails.application.routes.draw do
  get "up" => "rails/health#show", as: :rails_health_check
  #以下ルーティング省略
end

rails が用意しているhealthを使いました。

自分で、パス "/up" へHTTPでアクセスした時に、常にステータスコード 200 が返却されるようにエンドポイントを作成してもいいと思います。

また、下記のようにヘルスチェックのパスのルーティングを/upに設定します。

スクリーンショット 2025-01-21 11.19.07.png

終わりに

ALB のヘルスチェックが通らない原因の一つとして、HTTP から HTTPS へのリダイレクトが挙げられます。しかし、config.force_ssl = false を設定すると、HTTPS へのリダイレクトが無効になるため、セキュリティの観点から、本番環境では ALB 側で HTTPS を処理するように設定し、アプリケーション側では適切なリダイレクトポリシーを設定することを推奨します。

プログラミング学習中の初学者です。
内容の誤りや他に良い方法があれば、コメント等で教えていただけると幸いです。

参考記事

ALB のヘルスチェックが “Health checks failed with these codes:[XXX]” で失敗する原因と対処法を教えてください
VPC 「DNSホスト名」の有効化とは

15
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
15
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?