2016-06-05 2 views
0

AWS Elastic Beanstalk에 PHP 앱이 있습니다. S3에 애셋 버켓을 만들었습니다. EB로 요청을 보내는 기본 동작으로 애셋/*에 대한 요청을 S3로 보내려는 동작으로 Cloudfront 배포를 설정하려고합니다. 도메인에서 Cloudfront를 가리 킵니다.AWS Cloudfront 비헤이비어가 예상대로 작동하지 않습니다.

모든 요청은 EB 환경에 자산이 없으므로 404를 반환하는 EB로 전달됩니다.

나는 EB 용과 S3 용으로 각각 2 개의 Cloudfront 기원을 만들었습니다. 이 때문에 나는 기본 뭔가를 누락 가정 꽤 정직해야한다 것처럼

Precedence Path Pattern Origin           Protocol Policy Fwd Query Strings 
0   assets/*  S3-example-bucket        HTTP and HTTPS No 
1   Default (*) Custom-example.us-east-1.elasticbeanstalk.com HTTP and HTTPS Yes 

것 같다 : 이것은 내 행동이 어떻게 생겼는지입니다. 어떤 도움이라도 대단히 감사합니다.

편집 :

요청 헤더 :

GET /assets/images/10waysaudiobook.png HTTP/1.1 
Host: example.com 
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:46.0) Gecko/20100101 Firefox/46.0 
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 
Accept-Language: en-US,en;q=0.5 
Accept-Encoding: gzip, deflate 
Cookie: wordpress_logged_in_8a27500b7747be1e4fbad7f473f238e5=snickerspixy%7C1466021823%7Cr7rE5moINjanjHEqb1TGbsSkn9F7OCZLfX69IbcnGJu%7C28fc452885f3fe6e954243abab585a188f6511cdd6eeec6fa5ec5c50b9f3d393; wp-settings-7674=m4%3Do%26m5%3Do%26m9%3Do%26m6%3Do%26editor%3Dhtml%26m10%3Do%26m0%3Do%26m3%3Do%26hidetb%3D1%26m2%3Dc%26m1%3Do%26m8%3Do%26m12%3Do%26m7%3Do%26m11%3Do%26urlbutton%3Dnone%26m13%3Do%26tml1%3D1%26imgsize%3Dfull%26align%3Dcenter%26libraryContent%3Dbrowse%26ed_size%3D569%26unfold%3D1%26wplink%3D1%26mfold%3Do%26post_dfw%3Doff%26advImgDetails%3Dshow%26posts_list_mode%3Dlist; wp-settings-time-7674=1464816549; AWSELB=1FCB85F51606EBAFF15FEADB01C8069AEDE17E2A043407E615EF1A0E1ABF24607545A45D3DC206631F7AAE4503ADA423788B5E6B5B48FAE93EE916DE068509E64F92AC10FF; PHPSESSID=cpi2su7s967phu87rlpjgneel6; wordpress_test_cookie=WP+Cookie+check 
Connection: keep-alive 

응답 헤더 :

HTTP/1.1 404 Not Found 
Cache-Control: no-cache, must-revalidate, max-age=0 
Content-Type: text/html; charset=UTF-8 
Date: Sun, 05 Jun 2016 00:54:23 GMT 
Expires: Wed, 11 Jan 1984 05:00:00 GMT 
Link: <http://example.com/wp-json/>; rel="https://api.w.org/" 
Pragma: no-cache 
Server: Apache 
Transfer-Encoding: chunked 
Connection: keep-alive 
+0

구성이 설명 된 동작에 올바른 것으로 보입니다. 선행 슬래시는 CloudFront에서 필요하지 않습니다 ('assets/*'는'/ assets/*'와 같습니다). 그렇게해서는 안됩니다. 예상대로 작동하지 않는 'assets/*'에 대한 요청 중 하나에 대한 요청 및 응답 헤더를 게시하는 것을 고려하십시오. –

+0

@ Michael-sqlbot이 헤더 데이터를 추가했습니다. 나는 그것이 EC에서오고 있다는 것을 알기 때문에 WordPress에 의해 생성되는 404를 보여주는 것 외에 다른 유용한 것을 보지 못했습니다. – BillK

+1

철학적으로 말하자면, * 존재하지 않는 * 정보는 이야기를 말합니다 :이 요청은 CloudFront를 전혀 통과하지 않았습니다. 최소한 "Via :"헤더, X-Cache : '헤더,'X-Amz-Cf-Id :'헤더가있다. 귀하의 DNS가 CloudFront를 가리키고 있는지 확인하십시오. 그렇다면 응답을 확인하고 TTL은 사이트의 호스트 이름을 확인할 때 표시됩니다. 불필요하게 높게 설정되었을 수도 있고 아직 실행하지 못했을 수도 있습니다. 최근 변경 사항 인 경우 새 값을 "전파"할 수 있습니다. –

답변

1

헤더는이 요청이 있기 때문에, 모든 CloudFront를에 의해 제공되지 않았 음을 나타내는 응답이 존재해야하는 헤더이지만 ... 결석합니다. 당신이 원점에 CloudFront-Is-*-Viewer: 헤더를 전달하는 경우

CloudFront를가 Via:, X-Cache:x-amz-cf-id: 모든 응답 헤더, 때로는 Age: (캐시 적중 및 오류에 대한) 또는 Vary:을 추가합니다.

이러한 헤더가 없으면 사이트의 DNS가 CloudFront를 가리 키지 않았으며 여전히 EB 환경을 가리킬 수 있거나 변경 사항이 최근 인 경우 DNS 항목의 이전 TTL이 아직 만료되지 않았습니다.

관련 문제