↩️

ALBへのHTTP通信をHTTPSへリダイレクトする

2023/06/06に公開

今回はALBへのHTTP通信をHTTPS通信にリダイレクトしてみます。

概念図

リダイレクトのメリット

調査する中で、
古いURLにアクセスすることを防ぎ、新しいURLに誘導するため
という表現がしっくりきました。
古いURLでサイトにアクセス出来ないと、そのサイトへの不満につながってしまうかもしれません。

設定までの流れ

  • HTTPリスナーを作成する
  • 80番ポートが開放されていることを確認する

HTTPリスナーを作成する

HTTPリスナーの役割はHTTPSリスナーへのリダイレクトです。
Terraformの場合以下のコードで実現することが出来ます。

resource "aws_lb_listener" "test_listener" {
  load_balancer_arn = aws_lb.test_lb.arn
  port              = 80
  protocol          = "HTTP"
  default_action {
    type = "redirect"

    redirect {
      port        = "443"
      protocol    = "HTTPS"
      status_code = "HTTP_301"
    }
  }
}
  • HTTPSへのリダイレクト
  • ステータスコード301でリダイレクト

のように設定しています。

https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/lb_listener#redirect-action

リダイレクトルールの作成はこちらを参照のこと
https://docs.aws.amazon.com/ja_jp/elasticloadbalancing/latest/application/load-balancer-listeners.html#redirect-actions

80番ポートが開放されていることを確認する

80→443へのリダイレクトを行う場合、80番ポートを開ける必要があります。
こちらは元々開いている可能性が高いですが、開いていない場合は開けましょう。

alb用セキュリティグループ
  ingress {
    from_port   = 80
    to_port     = 80
    protocol    = "tcp"
    cidr_blocks = ["0.0.0.0/0"]
  }

  ingress {
    from_port   = 443
    to_port     = 443
    protocol    = "tcp"
    cidr_blocks = ["0.0.0.0/0"]
  }

動作確認

curlで確認します。
httpsでは普通にアクセス出来て

$ curl -I https://example.com
HTTP/2 200 
// 略

httpではリダイレクト込でアクセス出来ることを確認します

$ curl -I -L http://example.com
HTTP/1.1 301 Moved Permanently
// 略
Location: https://example.com:443/

HTTP/2 200 
//略

Locationでリダイレクト先が表示されることで、問題なくリダイレクトしていることがわかります。
ステータスコードも301ですね。

参考

https://developers.google.com/search/docs/crawling-indexing/301-redirects?hl=ja
https://knowledge.cpi.ad.jp/howto-cpi/242/

Discussion