6

Ho un dominio formulagrid.com.Supporto del reindirizzamento URL HTTPS con una singola distribuzione CloudFront

Sto utilizzando AWS S3 per ospitarlo come sito Web statico. Il mio problema era che volevo per reindirizzare il sottodominio www al dominio nuda in questo modo:

  • https://www.formulagrid.com -> https://formulagrid.com
  • http://www.formulagrid.com -> https://formulagrid.com

Amazon fornisce URL reindirizzamento da S3 secchio per S3 secchio se entrambi sono setup per hosting di siti web statici.

Quindi quello che ho dovuto fare è stato istituito due secchi:

  • formulagrid.com - sito web vero e proprio
  • www.formulagrid.com - esiste solamente per reindirizzare al sito vero e proprio

Questo funziona perfettamente bene se stai operando solo su HTTP, ma S3 non ha assolutamente supporto per HTTPS.

Il modo in cui è possibile utilizzare HTTPS per connettersi a un sito Web statico S3 consiste nell'impostare una distribuzione CloudFront davanti a un bucket S3. CloudFront, tuttavia, mentre fornisce HTTPS, esiste principalmente per funzionare come un CDN.

Inizialmente, avevo una singola configurazione di distribuzione CloudFront davanti al secchio S3 che contiene il sito reale. Tutto sembrava operativo: il sito era distribuito sul CDN, aveva HTTPS e HTTP reindirizzato a HTTPS.

C'è stata un'eccezione.

  • https://www.formulagrid.com era una pagina completamente rotto

Dopo aver cercato di trovare la fonte dell'errore per un po ', mi sono reso conto che è perché non stava attraversando il CDN, e cercando di accedere S3 over HTTPS non funziona.

Infine, quello che ho dovuto fare era fornire un'altra distribuzione per sedersi davanti al secchio S3 www in modo che fosse accessibile tramite HTTPS. È qui che arrivano le mie preoccupazioni perché, come ho detto prima, lo scopo principale di CloudFront è quello di essere un CDN.

Non ha alcun senso per me avere un CDN seduto di fronte a un URL che reindirizza a un altro. Inoltre, viene sollevata la questione se ricevere una doppia addebito per ogni richiesta che colpisce il sottodominio www perché avrebbe colpito l'altra distribuzione di CloudFront dopo essere stato reindirizzato.

Questo è frustrante perché sto cercando di eseguire un'architettura "serverless" utilizzando Lambda e dover eseguire il provisioning di un'istanza EC2 solo per eseguire la riscrittura dell'URL non è qualcosa che voglio fare a meno che non sia la mia ultima risorsa.

La soluzione sarebbe banale se Amazon ha offerto alcuna forma di riscrittura degli URL o se CloudFront stesso ha fatto il reindirizzamento, ma nessuna di queste esistono per quanto ne so (fatemi sapere se lo fanno).

Sono nuovo di AWS quindi spero che qualcuno con più esperienza possa indicarmi la giusta direzione.

risposta

7

Stai pensando troppo da vicino - non c'è niente di sbagliato in questa configurazione.

La soluzione sarebbe banale se Amazon ha offerto alcuna forma di riscrittura degli URL

Lo fanno - il secchio vuoto.

S3 non ha assolutamente supporto per HTTPS.

Non per i bucket ospitati nel sito Web, no ... ma CloudFront lo fa.

CloudFront non è solo un CDN. È anche uno scaricatore di SSL, prepagatore di percorsi, geolocator, georestrictor, gateway di contenuto sicuro, redirector http, https, personalizzatore di pagine di errore, substituter di root page, firewall di applicazioni Web, iniettore di intestazione di origine, gzipper di contenuto dinamico, multi-path -origine router di richiesta http, identificativo della piattaforma del visualizzatore, mitigatore DDoS, target alias dell'apice di zona ... quindi non essere troppo appeso su "CDN" o sul fatto che stai impilando un servizio di fronte a un altro - CloudFront è stato progettato, in gran parte, per integrare S3. Ognuno di essi è specializzato in alcuni aspetti dello stoccaggio e della consegna.

Quindi, hai fatto bene ... la maggior parte, comunque ... Creare un bucket, configurarlo per l'hosting del sito web, impostarlo per reindirizzare tutte le richieste su un altro sito (il non-www) e mettere un CloudFront distribuito di fronte ad esso - utilizzando l'URL dell'endpoint del sito Web con bucket in CloudFront, non quello dell'elenco a discesa - configurato con TTL elevati in modo che CloudFront invii un numero minimo di richieste a S3 e quindi metti il ​​tuo (gratuito!) certificato SSL da Amazon Certificate Manager. Routing di dominio alternativo HTTPS: risolto. Nessun server, nessuna risoluzione dei problemi ed economico. Il solo gli addebiti sono l'utilizzo - non vi è alcun addebito ricorrente in background come con i server.

Credito extra: configurare il reindirizzamento della distribuzione CloudFront per il livello di prezzo più basso. I reindirizzamenti da località più costose verranno indirizzati verso una posizione marginale più economica oppure - a scelta di CloudFront - possono essere offerti da una posizione di costo più elevata ma fatturati alla tariffa più bassa.

nota che la maggior parte del tempo, CloudFront dovrebbe servire i reindirizzamenti da S3 dal suo nascondiglio ... e quando si configura un secchio per reindirizzare tutte le richieste a un altro nome host, il reindirizzamento è un permanente reindirizzamento 301- che si suppone che i browser si nascondano da soli.

+0

Grazie per la risposta! Fondamentalmente ho fatto tutto ciò che hai detto. C'è una domanda che ho però. Per le richieste che vengono reindirizzate, non andrebbe 'CDN -> vuoto S3 -> CDN -> S3'? Questo è il mio problema principale – m0meni

+0

Dopo che CloudFront memorizza il reindirizzamento dal bucket vuoto, sarà CF> CF> S3 e se il contenuto del sito S3 è memorizzato nella cache, solo CF> CF. Dopo l'atterraggio iniziale vengono reindirizzati al dominio "nudo" e i collegamenti successivi li terranno lì ... questo non dovrebbe comportare diversamente se CF avesse la capacità nativa di reindirizzare a domini diversi - quelle richieste iniziali continuerebbero a colpire CF due volte , dal momento che il reindirizzamento porta il browser a ciò che il browser * assumerà * sempre * è un posto diverso, perché il nome host cambia ... sia che sia effettivamente la stessa macchina o meno. –

+0

Questo non significa che mi verrebbero addebitati due volte per ogni richiesta reindirizzata? Una volta per ogni richiesta CF? – m0meni