【问题标题】:Cloudfront Redirect using Route 53使用 Route 53 的 Cloudfront 重定向
【发布时间】:2021-05-30 08:29:44
【问题描述】:

我正在使用 Terraform 创建 Cloudfront 发行版。我已经启动并运行它,但我可以访问它的唯一方法是通过https://<id>.cloudfront.net/ 地址。我想使用 Route 53 区域中的记录,我必须重定向到 Cloudfront 分发。任何想法如何做到这一点?

variable "www_domain_name" {
  default = "example.com"
}

S3 存储桶用于托管静态代码。这对公众开放,并使用允许公众访问的政策。

resource "aws_s3_bucket" "www" {
  bucket = var.www_domain_name
  acl    = "public-read"
  policy = <<POLICY
{
  "Version":"2012-10-17",
  "Statement":[
    {
      "Sid":"AddPerm",
      "Effect":"Allow",
      "Principal": "*",
      "Action":["s3:GetObject"],
      "Resource":["arn:aws:s3:::${var.www_domain_name}/*"]
    }
  ]
}
POLICY
  website {
    index_document = "index.html"
    error_document = "404.html"
  }
}

AWS Certificate Manager 用于为域创建 SSL 证书。这可能需要很长时间才能申请,并且需要您使用您的电子邮件地址进行确认。

resource "aws_acm_certificate" "certificate" {
  domain_name       = "*.${var.root_domain_name}"
  validation_method = "EMAIL"
  subject_alternative_names = [ var.root_domain_name ]
}

AWS Cloudfront 用于将网站负载分配到亚马逊的边缘站点。

resource "aws_cloudfront_distribution" "www_distribution" {
  /**
   * The distribution's origin needs a "custom" setup in order to redirect 
   * traffic from <domain>.com to www.<domain>.com. The values bellow are the 
   * defaults.
   */
  origin {
    custom_origin_config {
      http_port              = "80"
      https_port             = "443"
      origin_protocol_policy = "http-only"
      origin_ssl_protocols   = ["TLSv1", "TLSv1.1", "TLSv1.2"]
    }

    /** 
     * This connects the S3 bucket created earlier to the Cloudfront 
     * distribution. 
     */
    domain_name = aws_s3_bucket.www.website_endpoint
    origin_id   = var.www_domain_name
  }

  enabled             = true
  default_root_object = "index.html"

  default_cache_behavior {
    viewer_protocol_policy = "redirect-to-https"
    compress               = true
    allowed_methods        = ["GET", "HEAD"]
    cached_methods         = ["GET", "HEAD"]
    target_origin_id       = var.www_domain_name
    min_ttl                = 0
    default_ttl            = 86400
    max_ttl                = 31536000

    forwarded_values {
      query_string = false
      cookies {
        forward = "none"
      }
    }
  }

  /**
   * This sets the aliases of the Cloudfront distribution. Here, it is being
   * set to be accessible by <var.www_domain_name>.
   */
  aliases = [ var.www_domain_name ]

  restrictions {
    geo_restriction {
      restriction_type = "none"
    }
  }

  /**
   * The AWS ACM Certificate is then applied to the distribution.
   */
  viewer_certificate {
    acm_certificate_arn = aws_acm_certificate.certificate.arn
    ssl_support_method  = "sni-only"
  }
}

需要创建 Route 53 区域,以便其名称服务器可以指向 Cloudfront 分发。

resource "aws_route53_zone" "zone" {
  name = var.root_domain_name
}

这是重定向到 Cloudfront Distribution 的 Route 53 记录。

resource "aws_route53_record" "www" {
  zone_id = aws_route53_zone.zone.zone_id
  name    = var.www_domain_name
  type    = "A"

  alias {
    name                   = aws_cloudfront_distribution.www_distribution.domain_name
    zone_id                = aws_cloudfront_distribution.www_distribution.hosted_zone_id
    evaluate_target_health = false
  }
}

【问题讨论】:

  • 全部应用后有什么问题?一目了然,我觉得很合适。
  • 问题是当我在Safari中访问url时,没有页面。当我访问云前端给我的 url 时,我看到了页面。我想 Route 53 重定向存在问题。
  • 没有页面因为没有加载或没有页面因为有错误?如果是这样,错误会显示什么?您是否尝试过以任何方式进行调试?
  • 没有加载任何页面。没有错误,只是不加载任何东西。云前端网址效果很好。我想将 www.domain.com 重定向到云端 url。
  • 您愿意/能够共享该域吗?如果没有看到您遇到的问题,这听起来很难调试。

标签: amazon-web-services terraform amazon-cloudfront


【解决方案1】:

在 cmets 和聊天中反复来回后,似乎 Route53 区域配置错误,缺少域所期望的名称服务器。

添加名称服务器记录以匹配whois tylernorlund.com | grep "Name Server" 的输出所显示的内容后,该区域再次可解析并且记录能够被解析。

$ whois tylernorlund.com | grep "Name Server"
   Name Server: NS-1398.AWSDNS-46.ORG
   Name Server: NS-1571.AWSDNS-04.CO.UK
   Name Server: NS-365.AWSDNS-45.COM
   Name Server: NS-871.AWSDNS-44.NET
Name Server: ns-1398.awsdns-46.org
Name Server: ns-1571.awsdns-04.co.uk
Name Server: ns-365.awsdns-45.com
Name Server: ns-871.awsdns-44.net

$ dig tylernorlund.com any @8.8.8.8

; <<>> DiG 9.11.3-1ubuntu1.14-Ubuntu <<>> tylernorlund.com any @8.8.8.8
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 31196
;; flags: qr rd ra; QUERY: 1, ANSWER: 11, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 512
;; QUESTION SECTION:
;tylernorlund.com.      IN  ANY

;; ANSWER SECTION:
tylernorlund.com.   59  IN  A   99.86.119.38
tylernorlund.com.   59  IN  A   99.86.119.32
tylernorlund.com.   59  IN  A   99.86.119.124
tylernorlund.com.   59  IN  A   99.86.119.72
tylernorlund.com.   21599   IN  NS  ns-1398.awsdns-46.org.
tylernorlund.com.   21599   IN  NS  ns-1571.awsdns-04.co.uk.
tylernorlund.com.   21599   IN  NS  ns-365.awsdns-45.com.
tylernorlund.com.   21599   IN  NS  ns-871.awsdns-44.net.
tylernorlund.com.   899 IN  SOA ns-365.awsdns-45.com. awsdns-hostmaster.amazon.com. 1 7200 900 1209600 86400
tylernorlund.com.   599 IN  MX  10 inbound-smtp.us-east-1.amazonaws.com.
tylernorlund.com.   299 IN  TXT "v=spf1 include:amazonses.com ~all"

;; Query time: 54 msec
;; SERVER: 8.8.8.8#53(8.8.8.8)
;; WHEN: Wed Mar 03 10:21:44 GMT 2021
;; MSG SIZE  rcvd: 402

【讨论】:

    猜你喜欢
    • 2018-04-01
    • 2020-02-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-02
    • 2013-02-17
    • 2019-10-16
    • 1970-01-01
    • 2021-02-26
    相关资源
    最近更新 更多