2016-02-16 3 views
5

Mam pewne problemy z konfigurowaniem statycznego hostingu witryn przy użyciu Amazon S3 i Cloudfront.Problem przekierowania podfolderów ze statyczną witryną WWW przy użyciu S3, CloudFront i ścieżki początkowej

Mamy wiele stron internetowych, które chcielibyśmy służyć jako statyczne strony internetowe przy użyciu usługi Amazon S3 + Cloudfront i wolelibyśmy je hostować w jednym segmencie S3.

Wstępna konfiguracja jest całkiem prosta, ale mamy problemy z podfolderami podfolderów, jeśli pominięto ukośny ukośnik w adresie URL.

przykład, utworzenie jednej strony internetowej z wiadra:

zawartość wiadra do WEBSITE1:

s3: //bucket-name/websites/website1/index.html

s3 : //bucket-name/websites/website1/about/index.html

Mam włączone statyczne hostowanie witryny dla tego zasobnika z domyślnym zestawem dokumentów "index.html"

Utworzyłem dystrybucję w chmurze Cloudfront do obsługi tej jednej witryny, domyślny obiekt główny jest ustawiony na "index.html".

Dystrybucja ma niestandardową pochodzenie wskazuje na statycznej stronie url „bucket-name.s3-website-us-east-1.amazonaws.com” ze ścieżką pochodzenia określonych na „/ stron/WEBSITE1”

po przejściu do adresu URL dystrybucji „” http://example.cloudfront.net prawidłowo służy „index.html” dokument z „s3: //bucket-name/websites/website1/index.html”

podczas nawigowania do „http://example.cloudfront.net/about/” również poprawnie obsługuje dokument "index.html" z "s3: //bucket-name/websites/website1/about/index.html"

Ale jeśli to końcowe ukośne polecenie, takie jak "http://example.cloudfront.net/about" S3 przekierowuje mnie na "http://example.cloudfront.net/websites/website1/about/", ponieważ mam ścieżkę Origin ustawioną na "/ sites/website1" Cloudfront poprosi o index.html z 's3: // bucket-name/websites/website1/about /websites/website1/about/index.html ", która nie istnieje.

Czy tu czegoś brakuje? Czy jest to niemożliwe, używając tylko Cloudfront i S3?

+0

myślę, że trzeba dodać wiele pochodzenie (jeden dla każdego folderu) dla swojej dystrybucji –

+0

@ KhalidT. Ah tak, to jest dokładnie jak próbuję skonfigurować, to jest tylko przekierowanie problemu mam przy pominięciu ukośnika w adresach URL dla podfolderów –

+0

Ponieważ S3 jest obiektowym pamięci masowej, to nie rozróżniaj pliki i foldery (wszystkie są obiektami). Pominięcie ukośnego ukośnika może spowodować takie zachowanie, zakładam –

Odpowiedz

8

skończyło się go rozwiązać za pomocą reguł routingu do wiadra S3

https://docs.aws.amazon.com/AmazonS3/latest/dev/HowDoIWebsiteConfiguration.html#configure-bucket-as-website-routing-rule-syntax

problem jest przekierowanie spowodowanego pominięciem wyników końcowy ukośnik w ścieżce Orgigin jest dołączana do pełnej ścieżki wiadro S3 („example.cloudfront.net/about” przekierowuje do „example.cloudfront.net/websites/website1/websites/website1/about/” to zawiedzie, ponieważ ścieżka jest nieprawidłowa)

Poniższa reguła routingu rozwiązuje ten problem poprzez wyzwalanie na błędnym przedrostku ścieżki i przekierowanie z powrotem do dystrybucji Cloudfront n z prefiksem usuniętym z żądania, tj. ("example.cloudfront.net/about" przekierowuje do "example.cloudfront.net/websites/website1/websites/website1/about/", które przekierowuje do "example.cloudfront.net/o/")

Minusem jest to, że trzeba pamiętać, aby zmodyfikować reguły routingu podczas dodawania nowych rozkładów

<RoutingRules> 
    <RoutingRule> 
     <Condition> 
      <KeyPrefixEquals>websites/website1/websites/website1/</KeyPrefixEquals> 
     </Condition> 
     <Redirect> 
      <HostName>example.cloudfront.net</HostName> 
      <ReplaceKeyPrefixWith></ReplaceKeyPrefixWith> 
     </Redirect> 
    </RoutingRule> 
</RoutingRules> 
+0

Próbowałem użyć tego przykładu, ale końcowe ukośniki nie są dołączane tak, jak w twoim przykładzie. Zamiast tego otrzymuję mój CNAME www.my-cname.com/about versus www.my-cname.com/about/, który kończy się "zbyt dużą liczbą przekierowań". – hybrid9

Powiązane problemy