Распределение Cloudfront не может загрузить подкаталоги в одном стеке, но работает в другом - PullRequest
1 голос
/ 13 июня 2019

Я использую облачную информацию (через безсерверную среду) для развертывания статических сайтов на S3 и настройки распределения облачного фронта с псевдонимом из домена route53.

У меня это работает для двух доменов, каждый новыйдомены, которые были созданы в route53.Я пытаюсь выполнить ту же настройку со старым доменом, который я передаю на route53 от существующего регистратора.

В распределении облачного фронта для этого нового домена не удается загрузить подкаталоги.Т.е. https://[mydistid].cloudfront.net/sub/dir/ не загружает ресурс на https://[mydistid].cloudfront.net/sub/dir/index.html

Существует общий вопрос, охватываемый другими вопросами SO .Вы должны указать s3 bucket в качестве пользовательского источника, чтобы CloudFront применил корневой корневой объект по умолчанию к подкаталогам.

Я сделал это, как видно из моего ресурса serverless.yml CloudFrontDistribution:


    XxxxCloudFrontDistribution:
      Type: AWS::CloudFront::Distribution
      Properties:
        DistributionConfig:
          Aliases:
            - ${self:provider.environment.CUSTOM_DOMAIN}
          Origins:
            - DomainName: ${self:provider.environment.BUCKET_NAME}.s3.amazonaws.com
              Id: Xxxx
              CustomOriginConfig:
                HTTPPort: 80
                HTTPSPort: 443
                OriginProtocolPolicy: https-only
          Enabled: 'true'
          DefaultRootObject: index.html
          CustomErrorResponses:
            - ErrorCode: 404
              ResponseCode: 200
              ResponsePagePath: /error.html
          DefaultCacheBehavior:
            AllowedMethods:
              - DELETE
              - GET
              - HEAD
              - OPTIONS
              - PATCH
              - POST
              - PUT
            TargetOriginId: Xxxx
            Compress: 'true'
            ForwardedValues:
              QueryString: 'false'
              Cookies:
                Forward: none
            ViewerProtocolPolicy: redirect-to-https
          ViewerCertificate:
            AcmCertificateArn: ${self:provider.environment.ACM_CERT_ARN}
            SslSupportMethod: sni-only

Это приводит к распределению CF с корзиной s3 в качестве 'Custom Origin' в AWS.

Однако при доступе к подкаталогам путь к странице ошибки, а не к корневому каталогу по умолчаниюобъект в этом каталоге.

Что очень странно, так это то, что он использует ту же конфигурацию, что и другой стек, что нормально.Единственное различие, которое я вижу (пока), состоит в том, что в рабочем стеке есть домен, созданный route53, тогда как в нем используется домен, созданный другим регистратором, поэтому я посмотрю, что произойдет после завершения миграции сервера имен.Я скептически отношусь к тому, что это решит проблему, хотя на распределение CF не должен влиять статус домена route53

1 Ответ

0 голосов
/ 25 июня 2019

У меня сейчас работают оба стека.Проблема заключалась в использовании URL-адреса S3 REST API

${self:provider.environment.BUCKET_NAME}.s3.amazonaws.com

При переходе на URL-адрес веб-сайта s3 работает:

${self:provider.environment.BUCKET_NAME}.s3-website-us-east-1.amazonaws.com

У меня нет объяснения, почему первый URL работал с 1 стеком, но не с другим.

Другое изменение, которое мне нужно было сделать, - установить OriginProtocolPolicy из CustomOriginConfig в http-only, этопотому что сайты s3 не поддерживают https.

Вот моя обновленная конфигурация CloudFormation:

XxxxCloudFrontDistribution:
      Type: AWS::CloudFront::Distribution
      Properties:
        DistributionConfig:
          Aliases:
            - ${self:provider.environment.CUSTOM_DOMAIN}
          Origins:
            - DomainName: ${self:provider.environment.BUCKET_NAME}.s3-website-us-east-1.amazonaws.com
              Id: Xxxx
              CustomOriginConfig:
                HTTPPort: 80
                OriginProtocolPolicy: http-only
          Enabled: 'true'
          DefaultRootObject: index.html
          CustomErrorResponses:
            - ErrorCode: 404
              ResponseCode: 200
              ResponsePagePath: /error.html
          DefaultCacheBehavior:
            AllowedMethods:
              - DELETE
              - GET
              - HEAD
              - OPTIONS
              - PATCH
              - POST
              - PUT
            TargetOriginId: Xxxx
            Compress: 'true'
            ForwardedValues:
              QueryString: 'false'
              Cookies:
                Forward: none
            ViewerProtocolPolicy: redirect-to-https
          ViewerCertificate:
            AcmCertificateArn: ${self:provider.environment.ACM_CERT_ARN}
            SslSupportMethod: sni-only
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...