S3 리디렉션이 포함 된 Amazon Cloudfront


10

비교적 간단한 작업을 수행하려고합니다. 사이트의 핵심 도메인으로 리디렉션하도록 몇 개의 도메인 및 하위 도메인을 설정하고 싶지만 리디렉션을 Cloudfront에 배치하고 싶습니다. 루트 경로를 리디렉션하는 것을 제외하고는 모든 것이 작동합니다. 이는 S3 버킷을 부분적으로 설명하는 XML 파일을 가져옵니다.

배경

S3

S3를 사용하면 다음 과 같이 전체 리디렉션 버킷설정할 수 있습니다 .

모든 요청 리디렉션 설정이있는 S3

이를 테스트하면서 웹 엔드 포인트 (brass9-com.s3-website-us-west-1.amazonaws.com)가해야 할 일을 수행합니다. brass9.com으로 리디렉션됩니다. 좋은.

클라우드 프론트

Cloudfront에서는 S3 버킷을 가리킬 수 있지만 그렇게 제안하는 방식이 잘못되었습니다. brass9-com.s3.amazonaws.com과 같이 버킷 이름을 가리키는 대신 위 의 웹 엔드 포인트를 사용해야합니다 . 그 외에는 모든 것을 기본값으로 유지하고 올바른 리디렉션 동작을 얻을 수 있습니다. 따라서 www.brass9.com/portfolio 와 같은 경로는 원하는 위치로 올바르게 리디렉션됩니다. 또한 좋습니다.

문제-루트 도메인 리디렉션

그런 다음 작동하지 않는 한 가지는 일반 www.brass9.com 에서 리디렉션하는 것입니다 . 리디렉션을 얻는 대신이 이상한 결과를 얻습니다.

<?xml version="1.0" encoding="UTF-8"?>
<ListBucketResult xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
<Name>brass9-com</Name><Prefix></Prefix>
<Marker></Marker><MaxKeys>1000</MaxKeys><IsTruncated>false</IsTruncated>
</ListBucketResult>

확인... . 따라서 기본 루트 객체가 없기 때문에 이것은 완전히 예기치 않은 것은 아닙니다 . 그러나이 동작을 막기 위해 어떤 기본 루트 개체를 지정할 수 있습니까? 내가 지적해야 할 S3 리디렉션 객체의 이름은 무엇입니까? 아니면 다른 적절한 구성이 있습니까? 아니면 Cloudfront와 S3가 Amazon이 수정 해야하는 상호 작용 방식의 버그입니까?

알려진 작동하지 않는 솔루션 : 기본 루트 개체

index.html의 기본 루트 객체를 지정할 수는 있지만 아무 것도 도움이되지 않습니다. 문제를 변경하기 만합니다. Cloudfront URL은 기본 사이트 인 404 인 /index.html로 리디렉션됩니다 (index.html 파일을 사용하지 않고 서버 측 프레임 워크 기반 사이트). 서버에 index.html을 넣을 수는 있지만 처음에는 Cloudfront를 사용하는 속도가 약간 떨어집니다.

유제

한 질문은 비슷한 것을 묻지 만 내가보고있는 것 대신 XML 응답 인 빈 바이트 0 응답 을 다시 얻습니다 . 해당 문제에 대한 질문이나 해결책은 포함되어 있지 않습니다.

관련 기사

한 기사에서는 베어 도메인과 www 도메인 모두에서 전체 사이트를 제공 한다고 제안 합니다 . 이것은 사용자의 북마크, 검색 순위 등을 고정시킵니다. 이렇게하면 안됩니다.

S3 및 Cloudfront 에서 리디렉션 웹 사이트가 아닌 정적 웹 사이트를 호스팅하는 것에 대해 논의 하는 사람들도 있습니다.

그렇다면 어떻게해야합니까?

Cloudfront 구성의 스크린 샷-S3 원점을 가리키는 기본 루트 객체가 없습니다. InProgress 무시-방금 기본 루트 개체를 설정 및 해제하여 테스트했습니다.

S3을 가리키는 기본 루트 객체가없는 Cloudfront 배포

해당 배포판의 Origin 구성 :

원점-S3을 가리키며 기본값


1
모든 것을 "리디렉션"하도록 구성된 웹 사이트 엔드 포인트에 대한 요청은 루트를 포함하여 정확히 수행해야합니다. 해당 리디렉션 버킷에 대한 버킷 정책이 있습니까? 마치 당신이하는 것처럼 들리지만 그렇게해서는 안됩니다. 또한 GET /웹 엔드 포인트를 사용하도록 구성을 수정하기 전에 Cloudfront에서 캐시 된 응답을 볼 수 있었던 것처럼 들립니다 .
Michael-sqlbot

1
CF의 구성을 무효화하고 여러 번 변경했지만 실제로 캐시 된 ListBucket 응답은 S3에 남아 있습니다. 정리하는 데 1 ~ 4 시간이 걸립니다. @ Michael-sqlbot 댓글로 답변을 게시하면 댓글을 수락 됨으로 표시 할 수 있습니다.
Chris Moschini

답변:


4

이 문제가있는 경우 클라우드 프론트에 대해 s3 버킷 오리진을 구성 할 때 먼저 확인하면 자동 완성 이이 ListBucketResult 응답을 리턴하는 s3 REST 엔드 포인트 domain.amazonaws.com을 리턴합니다.

웹 사이트 엔드 포인트 domain.s3-website-region.amazonaws.com을 수동으로 작성 해야 합니다.

중요 사항 : REST 엔드 포인트로 클라우드 프론트를 잘못 구성한 경우 무효화를 통해 캐시를 무효화해야합니다. 그렇지 않으면 REST 응답이 계속 리턴됩니다.


캐시 무효화에 대한 메모는 마침내 며칠 동안 쫓아 온 문제를 해결하는 데 도움이되었습니다. 감사합니다!
Nate

고마워요! Terraform 사용자 origin의 경우 배포 블록 aws_s3_bucket.BUCKET.website_endpoint에서 domain_name(not bucket_regional_name)을 사용하고 custom_origin_config블록을 추가하십시오 .
dusan

당신은 생명의 은인입니다! 우리는 마지막 날 에이 문제로 어려움을 겪고 있었고 배포 설정을 변경하더라도 ListBucketResult XML을 계속 가져 왔습니다. 마지막으로 배포를 삭제하고 domain.s3-website-region.amazonaws.com을 가리키는 새 배포를 만든 후 리디렉션이 우리에게 효과적이었습니다!
데일 자크

2

해결 방법 : 질문에 설명 된대로 리디렉션을 설정 한 다음 S3 및 CloudFront 캐시 시간을 기다리십시오. 그것들은 4 시간 이상이 될 수 있으므로 모든 것을 설정 한 다음 기다렸다가 최선을 다하기를 바랍니다.

(이것은 Comments의 Michael의 솔루션이지만 지금은 몇 년이 지났으며 실제로 답변 됨으로 표시되어야합니다.)


0

주석을 달 수 없으므로 답변으로 작성 하십시오-http : //docs.aws.amazon.com/AmazonCloudFront/latest/APIReference/DistributionConfigDatatype.html#DistributionConfigDatatype_Elements 의 문서에서 빈 기본 루트 객체를 가질 수 있습니다.

배포를 만들 때 기본 루트 개체를 지정하지 않으려면 빈 DefaultRootObject 요소를 포함하십시오.


당신은 할 수 있지만 (일부 API 라이브러리는 그것을 금지하지만) 빈 기본 루트 객체를 사용하면 내 질문에 우스운 ListBucketResult XML 응답이 나타납니다.
Chris Moschini
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.