Hosting virtuale dei bucket - Amazon Simple Storage Service

Hosting virtuale dei bucket

L'hosting virtuale è la pratica di servire più siti Web da un unico server Web. Un modo per differenziare i siti nelle richieste REST API di Amazon S3 consiste nell'utilizzare il nome host apparente dell'URI della richiesta anziché semplicemente la parte del nome del percorso dell'URI. Una richiesta REST Amazon S3 ordinaria specifica un bucket utilizzando il primo componente delimitato da barre del percorso dell'URI della richiesta. È possibile invece utilizzare l'hosting virtuale di Amazon S3 per un bucket in una chiamata di REST API utilizzando l'intestazione HTTP Host. In pratica, Amazon S3 interpreta Host come se la maggior parte dei bucket fosse accessibile immediatamente per alcuni tipi di richieste all'indirizzo https://bucket-name.s3.region-code.amazonaws.com. Per un elenco completo degli endpoint e delle Regioni Amazon S3, consulta Endpoint e quote di Amazon S3 in Riferimenti generali di Amazon Web Services.

L'hosting virtuale ha anche altri vantaggi. Assegnando al bucket il nome del dominio registrato e rendendo tale nome un alias DNS per Amazon S3, è possibile personalizzare completamente l'URL delle risorse Amazon S3, ad esempio, http://my.bucket-name.com/. Puoi anche pubblicare nella directory root del server virtuale del bucket. Questa possibilità può essere importante in quanto molte applicazioni esistenti cercano i file in questa ubicazione standard. Ad esempio, favicon.ico, robots.txt e crossdomain.xml dovrebbero trovarsi tutti nella directory root.

Importante

Quando si utilizzano bucket in stile hosting virtuale con SSL, il certificato jolly SSL confronta solo i bucket che non contengono punti (.). Per risolvere questa limitazione, utilizzare HTTP o scrivere una logica di verifica del certificato personalizzata. Per ulteriori informazioni, consulta Amazon S3 Path Deprecation Plan (Piano di obsolescenza del percorso Amazon S3) in AWS News Blog.

Richieste in stile percorso

Attualmente, Amazon S3 supporta sia gli URL in stile hosting virtuale che quelli in stile percorso in tutte le Regioni AWS. Tuttavia, gli URL in stile percorso non saranno più disponibili in futuro. Per ulteriori informazioni, consulta la seguente nota importante.

In Amazon S3, gli URL in stile percorso utilizzano il seguente formato.

https://s3.region-code.amazonaws.com/bucket-name/key-name

Ad esempio, se hai creato un bucket denominato DOC-EXAMPLE-BUCKET1 nella regione Stati Uniti occidentali (Oregon) e vuoi accedere all'oggetto puppy.jpg in quel bucket, puoi utilizzare il seguente URL in stile percorso:

https://s3.us-west-2.amazonaws.com/DOC-EXAMPLE-BUCKET1/puppy.jpg
Importante

Aggiornamento (23 settembre 2020): per assicurare che i clienti abbiano il tempo necessario per eseguire la transizione agli URL in stile hosting virtuale, abbiamo deciso di posticipare l'obsolescenza degli URL in stile percorso. Per ulteriori informazioni, consulta Piano di obsolescenza del percorso Amazon S3 - Il resto della storia nel Blog AWS News.

Richieste in stile hosting virtuale

In un URI in stile hosting virtuale, il nome del bucket fa parte del nome del dominio nell'URL.

Gli URL in stile hosting virtuale di Amazon S3 utilizzano il seguente formato.

https://bucket-name.s3.region-code.amazonaws.com/key-name

In questo esempio, DOC-EXAMPLE-BUCKET1 è il nome del bucket, Stati Uniti occidentali (Oregon) è la regione e puppy.png è il nome della chiave:

https://DOC-EXAMPLE-BUCKET1.s3.us-west-2.amazonaws.com/puppy.png

Specifica del bucket nell'intestazione HTTP Host

Purché la richiesta GET non utilizzi l'endpoint SSL, è possibile specificare il bucket per la richiesta utilizzando l'intestazione HTTP Host. L'intestazione Host in una richiesta REST viene interpretata come indicato di seguito:

  • Se l'intestazione Host viene omessa o ha un valore s3.region-code.amazonaws.com, il bucket per la richiesta sarà il primo componente delimitato da barre del percorso dell'URI della richiesta e la chiave per la richiesta sarà composta dai restanti componenti dell'URI della richiesta. Questo è il metodo ordinario, mostrato nel primo e nel secondo esempio di questa sezione. È possibile omettere l'intestazione Host solo per le richieste HTTP 1.0.

  • Altrimenti, se il valore dell'intestazione Host termina con .s3.region-code.amazonaws.com, il nome del bucket è il componente principale del valore dell'intestazione Host fino a .s3.region-code.amazonaws.com. La chiave per la richiesta è l'URI della richiesta. Questa interpretazione espone i bucket come sottodomini di .s3.region-code.amazonaws.com, come mostrano il terzo e il quarto esempio in questa sezione.

  • Altrimenti, il bucket per la richiesta è il valore in caratteri minuscoli dell'intestazione Host e la chiave per la richiesta è l'URI della richiesta. Questa interpretazione è utile nei casi in cui il nome DNS è stato registrato come nome del bucket e configurato il nome come alias del nome canonico (CNAME) per Amazon S3. La procedura per registrare i nomi di dominio e configurare i record DNS CNAME esula dall'ambito di questa guida, ma il risultato è mostrato nell'esempio finale di questa sezione.

Esempi

Questa sezione fornisce URL e richieste di esempio.

Esempio - URL e richieste in stile percorso

In questo esempio viene utilizzato:

  • Nome bucket ‐ example.com

  • Regione ‐ Stati Uniti orientali (Virginia settentrionale)

  • Nome chiave ‐ homepage.html

Di seguito è riportato l'URL:

http://s3.us-east-1.amazonaws.com/example.com/homepage.html

Di seguito è riportata la richiesta:

GET /example.com/homepage.html HTTP/1.1 Host: s3.us-east-1.amazonaws.com

Di seguito è riportata la richiesta con HTTP 1.0 e senza intestazione Host:

GET /example.com/homepage.html HTTP/1.0

Per informazioni sui nomi compatibili con DNS, consulta Limitazioni. Per ulteriori informazioni sulle chiavi, consultare Chiavi.

Esempio - URL e richieste in stile hosting virtuale

In questo esempio viene utilizzato:

  • Nome bucketDOC-EXAMPLE-BUCKET1.eu

  • Regione ‐ Europa (Irlanda)

  • Nome chiavehomepage.html

Di seguito è riportato l'URL:

http://DOC-EXAMPLE-BUCKET1.eu.s3.eu-west-1.amazonaws.com/homepage.html

Di seguito è riportata la richiesta:

GET /homepage.html HTTP/1.1 Host: DOC-EXAMPLE-BUCKET1.eu.s3.eu-west-1.amazonaws.com
Esempio - metodo alias CNAME

Per utilizzare questo metodo, è necessario configurare il nome DNS come un alias CNAME per bucket-name.s3.us-east-1.amazonaws.com. Per ulteriori informazioni, consulta Personalizzazione degli URL Amazon S3 con record CNAME.

In questo esempio viene utilizzato:

  • Nome bucket ‐ example.com

  • Nome chiavehomepage.html

Di seguito è riportato l'URL:

http://www.example.com/homepage.html

Di seguito è riportato l'esempio:

GET /homepage.html HTTP/1.1 Host: www.example.com

Personalizzazione degli URL Amazon S3 con record CNAME

A seconda delle esigenze, è possibile che non desideri che s3.region-code.amazonaws.com venga visualizzato sul tuo sito Web o sul tuo servizio. Se ad esempio ospiti le immagini del sito Web su Amazon S3, è possibile che tu preferisca http://images.example.com/ anziché http://images.example.com.s3.us-east-1.amazonaws.com/. È possibile fare riferimento a qualsiasi bucket con un nome compatibile con DNS come indicato di seguito: http://BucketName.s3.Region.amazonaws.com/[Filename], ad esempio, http://images.example.com.s3.us-east-1.amazonaws.com/mydog.jpg. Utilizzando CNAME, è possibile associare images.example.com a un nome host Amazon S3 in modo che l'URL precedente diventi http://images.example.com/mydog.jpg.

Il nome del bucket deve corrispondere esattamente al CNAME. Ad esempio, se crei un CNAME per associare images.example.com a images.example.com.s3.us-east-1.amazonaws.com, http://images.example.com/filename e http://images.example.com.s3.us-east-1.amazonaws.com/filename saranno identici.

Il record DNS di CNAME dovrebbe assegnare al nome del dominio il nome host in stile hosting virtuale appropriato come alias. Se ad esempio il nome del bucket e il nome del dominio sono images.example.com e il bucket si trova nella regione Stati Uniti orientali (Virginia settentrionale), il record CNAME dovrebbe assegnare l'alias a images.example.com.s3.us-east-1.amazonaws.com.

images.example.com CNAME images.example.com.s3.us-east-1.amazonaws.com.

Amazon S3 utilizza il nome host per determinare il nome del bucket. Quindi il nome del bucket e CNAME devono essere gli stessi. Si supponga ad esempio di avere configurato www.example.com come CNAME per www.example.com.s3.us-east-1.amazonaws.com. Quando accedi a http://www.example.com, Amazon S3 riceve una richiesta simile alla seguente:

GET / HTTP/1.1 Host: www.example.com Date: date Authorization: signatureValue

Amazon S3 vede solo il nome host originale www.example.com e non rileva la mappatura CNAME usata per risolvere la richiesta.

È possibile utilizzare qualsiasi endpoint Amazon S3 in un alias CNAME. Ad esempio, s3.ap-southeast-1.amazonaws.com può essere utilizzato negli alias CNAME. Per ulteriori informazioni sugli endpoint, consulta Endpoint della richiesta. Per creare un sito Web statico utilizzando un dominio personalizzato, consulta Configurazione di un sito web statico utilizzando un dominio personalizzato registrato con Route 53

Importante

Quando si utilizzano URL personalizzati con CNAME, è necessario assicurarsi che esista un bucket corrispondente per qualsiasi record o alias CNAME configurato. Ad esempio, se si creano voci DNS per www.example.com e login.example.com per pubblicare contenuti Web utilizzando S3, è necessario creare entrambi i bucket www.example.com e login.example.com.

Quando un record o un alias CNAME è configurato in modo che punti a un endpoint S3 senza un bucket corrispondente, qualsiasi utente AWS può creare quel bucket e pubblicare contenuti con l'alias configurato, anche se la proprietà non è la stessa.

Per lo stesso motivo, si consiglia di modificare o rimuovere il CNAME o l'alias corrispondente quando si elimina un bucket.

Come associare un nome host a un bucket Amazon S3

Associazione di un nome host a un bucket Amazon S3 utilizzando un alias CNAME
  1. Selezionare un nome host appartenente a un dominio sottoposto al proprio controllo.

    In questo esempio viene utilizzato il sottodominio images del dominio example.com.

  2. Creare un bucket che corrisponda al nome host.

    In questo esempio i nomi host e del bucket sono images.example.com. Il nome del bucket deve corrispondere esattamente al nome host.

  3. Creare un record DNS CNAME che definisca il nome host come un alias per il bucket Amazon S3.

    Ad esempio:

    images.example.com CNAME images.example.com.s3.us-west-2.amazonaws.com

    Importante

    Per motivi di instradamento della richiesta, il record DNS del CNAME deve essere definito esattamente come mostrato nell'esempio precedente. In caso contrario, potrebbe mostrare un funzionamento corretto ma determinare un comportamento imprevisto.

    La procedura per la configurazione dei record DNS CNAME dipende dal server o dal provider DNS. Per informazioni specifiche, consultare la documentazione del server o contattare il provider.

Restrizioni

Il supporto di SOAP su HTTP non viene più utilizzato ma è ancora disponibile su HTTPS. Le nuove funzioni di Amazon S3 non sono supportate per SOAP. Invece di utilizzare SOAP, si consiglia di utilizzare REST API o gli SDK AWS.

Compatibilità con le versioni precedenti

Le sezioni seguenti trattano vari aspetti della compatibilità con le versioni precedenti di Amazon S3 relativi a richieste URL in stile percorso e in stile hosting virtuale.

Endpoint legacy

Alcune regioni supportano gli endpoint legacy. Questi endpoint potrebbero essere visualizzati nei registri di accesso al server o nei registri AWS CloudTrail. Per ulteriori informazioni, consulta le informazioni riportate di seguito. Per un elenco completo degli endpoint e delle Regioni Amazon S3, consulta Endpoint e quote di Amazon S3 in Riferimenti generali di Amazon Web Services.

Importante

Sebbene nei log siano presenti endpoint legacy, si consiglia di utilizzare sempre la sintassi standard dell'endpoint per accedere ai bucket.

Gli URL in stile hosting virtuale di Amazon S3 utilizzano il seguente formato.

https://bucket-name.s3.region-code.amazonaws.com/key-name

In Amazon S3, gli URL in stile percorso utilizzano il seguente formato.

https://s3.region-code.amazonaws.com/bucket-name/key-name

s3‐Regione

Alcune regioni Amazon S3 meno recenti supportano endpoint che contengono un trattino (-) tra s3 e il codice della regione (ad esempio, s3‐us-west-2) anziché un punto (ad esempio, s3.us-west-2). Se il bucket si trova in una di queste regioni, potrebbe essere visualizzato il seguente formato endpoint nei log di accesso al server o nei log di CloudTrail:

https://bucket-name.s3-region-code.amazonaws.com

In questo esempio, il nome del bucket è DOC-EXAMPLE-BUCKET1 e la regione è Stati Uniti occidentali (Oregon):

https://DOC-EXAMPLE-BUCKET1.s3-us-west-2.amazonaws.com

Endpoint globale legacy

Per alcune regioni, è possibile utilizzare l'endpoint globale legacy per costruire richieste che non specificano un endpoint specifico della regione. L'endpoint globale legacy è il seguente:

bucket-name.s3.amazonaws.com

Nei log di accesso al server o nei log di CloudTrail, è possibile che vengano visualizzate richieste che utilizzano l'endpoint globale legacy. In questo esempio, il nome del bucket è DOC-EXAMPLE-BUCKET1 e l'endpoint globale legacy è:

https://DOC-EXAMPLE-BUCKET1.s3.amazonaws.com
Richieste virtuali in stile hosting virtuale per Stati Uniti orientali (Virginia settentrionale)

Le richieste effettuate con l'endpoint globale legacy sono instradate negli Stati Uniti orientali (Virginia settentrionale) per impostazione predefinita. Pertanto, l'endpoint globale legacy viene talvolta utilizzato al posto dell'endpoint regionale per Stati Uniti orientali (Virginia settentrionale). Se crei un bucket in Stati Uniti orientali (Virginia settentrionale) e utilizzi l'endpoint globale, Amazon S3 instrada la richiesta a questa regione per impostazione predefinita.

Richieste in stile hosting virtuale per altre regioni

L'endpoint globale legacy viene utilizzato anche per le richieste in stile hosting virtuale nelle altre regioni supportate. Se crei un bucket in una regione lanciata prima del 20 marzo 2019 e utilizzi l'endpoint globale legacy, Amazon S3 aggiorna il record DNS per reinstradare la richiesta alla posizione corretta. Questa operazione potrebbe richiedere del tempo. Nel frattempo, viene applicata la regola di default: la richiesta in stile hosting virtuale viene inviata alla regione Stati Uniti orientali (Virginia settentrionale). Amazon S3 quindi la reindirizza con un reindirizzamento HTTP 307 temporaneo alla regione corretta.

Per i bucket S3 in regioni lanciate dopo il 20 marzo 2019, il server DNS non indirizza la richiesta direttamente alla Regione AWS in cui risiede il bucket. Restituisce invece un errore HTTP 400 - Richiesta non valida. Per ulteriori informazioni, consulta Esecuzione di richieste.

Richieste in stile percorso

Per la regione Stati Uniti orientali (Virginia settentrionale), è possibile utilizzare l'endpoint globale legacy per le richieste in stile percorso.

Per tutte le altre regioni, la sintassi in stile percorso richiede l'utilizzo dell'endpoint specifico della regione quando si cerca di accedere al bucket. Se si tenta di accedere a un bucket con l'endpoint globale legacy o un altro endpoint diverso rispetto a quello della regione in cui risiede il bucket, viene visualizzato un errore 307 Temporary Redirect del codice di risposta HTTP che indica qual è l'URI corretto per la risorsa. Ad esempio, se utilizzi https://s3.amazonaws.com/bucket-name per un bucket creato nella regione Stati Uniti occidentali (Oregon), verrà visualizzato un errore di reindirizzamento temporaneo HTTP 307.