Alojamiento de sitio web estático
Precauciones
Por motivos de seguridad y cumplimiento, utilizar el alojamiento de sitios web estático a través del nombre de dominio de OBS predeterminado (nombre de dominio de bucket o nombre de dominio de sitio web estático) será prohibido por OBS. Cuando utiliza dicho nombre de dominio para acceder a páginas web a través de un navegador, no se mostrará ningún contenido, en su lugar, el contenido se descargará como un archivo adjunto.
Esta prohibición entrará en vigor en diferentes regiones en los dos momentos siguientes:
January 1, 2022: CN North-Beijing1, CN North-Beijing4, CN East-Shanghai1, CN East-Shanghai2y CN South-Guangzhou
March 25, 2022: CN-Hong Kong, AP-Bangkok, AP-Singapore, AF-Johannesburg, LA-Mexico City1, LA-Mexico City2, LA-Sao Paulo1 y LA-Santiago
Sin embargo, todavía se puede realizar el alojamiento de un sitio web estático a través de un nombre de dominio definido por el usuario y se puede obtener una vista previa del contenido de la página web. Para obtener más información, consulte ¿Cómo previsualizo objetos en OBS a través de un navegador?
Escenarios
Puede usar OBS para alojar su sitio web estático, para el que también puede configurar un documento de índice, un documento de error y una dirección de página. Puede cargar los archivos de contenido del sitio web estático en el bucket en OBS y configurar un permiso de lectura para usuarios anónimos para estos archivos y, a continuación, configurar el modo de alojamiento de sitio web estático para que el bucket aloje los sitios web estáticos en OBS.
Los sitios web estáticos contienen páginas estáticas y algunos scripts que pueden ejecutarse en clientes, como JavaScript y Flash. A diferencia de los sitios web estáticos, los sitios dinámicos dependen de los servidores para procesar los scripts, entre ellos los scripts PHP, JSP y ASP.NET. OBS no admite scripts que se ejecutan en servidores.

Después de habilitar el alojamiento de sitios web estático, puede acceder a los objetos de un bucket utilizando cualquiera de los siguientes métodos:
- Gestión de recursos: puede acceder a los objetos de un bucket a través de un nombre de dominio común. Puede usar API o SDK y nombres de dominio OBS predeterminados con endpoints contenidos para realizar operaciones comunes en los bucket y objetos, como cargar, descargar, eliminar y enumerar.
- Sitio web estático: puede acceder a objetos en un bucket mediante un nombre de dominio específico. En este modo, la visualización de la página de índice, páginas de error y páginas solicitadas se implementa de acuerdo con las reglas de alojamiento de nombres de dominio estáticos configuradas.
La configuración del alojamiento web estático tiene efecto en dos minutos. Una vez que surta efecto, puede acceder a recursos estáticos utilizando los siguientes nombres de dominio de acceso:
https://bucketname.OBS static website hosting domain name/Object name http://bucketname.OBS static website hosting domain name/Object name

Evite usar (.) de períodos en el nombre del bucket de destino. De lo contrario, pueden producirse errores en el certificado de autenticación de cliente cuando los usuarios usan HTTPS para el acceso.
Para permitir que sus clientes accedan al contenido en el nodo del terminal del sitio web, debe hacer que todo su contenido sea público y accesible. Puede utilizar políticas de bucket o ACL en objetos para conceder permisos.
En la siguiente tabla se enumeran las diferencias entre el modo de administración de recursos y el modo de sitio web estático.
Principal diferencia |
Gestión de recursos |
Sitio web estático |
---|---|---|
Control de acceso |
Tanto el contenido público como el privado son compatibles. |
Solo se admite el contenido público. |
Procesamiento de mensajes de error |
Se devuelve una respuesta de error en formato XML. |
Se devuelve un documento HTML. |
Soporte de redirección |
N/A |
Se admite la redirección a nivel de objeto y a nivel de bucket. |
Solicitud soportada |
Se admiten operaciones en todos los bucket y objetos. |
Solo se admiten las solicitudes de GET y HEAD en objetos. |
Respuesta a solicitudes de GET y HEAD de nivel raíz de bucket |
Se devuelve una lista de claves de objeto en un bucket. |
Se devuelve el archivo de índice especificado en la configuración. |
Descripción de redirección
Al utilizar el alojamiento de sitios web estático, puede configurar la redirección para redirigir solicitudes específicas o todas.
Si se cambia la estructura, la dirección o la extensión del nombre de archivo de un sitio web, los usuarios no podrán acceder al sitio web utilizando la dirección anterior. (como la dirección guardada en la carpeta de favoritos) y se devolverá el mensaje de error 404. En este caso, puede configurar la redirección para que el sitio web redirija las solicitudes de acceso de los usuarios a la página especificada en lugar de devolver la página de error 404.
Las configuraciones típicas incluyen:
- Redirigir todas las solicitudes a otro sitio web.
- Redirigir solicitudes específicas basadas en reglas de redirección.
Configurar el alojamiento de sitios web estáticos
Descripción general
Si desea usar un bucket para alojar sitios web estáticos, agregue la configuración del sitio web al bucket. La configuración incluye la siguiente información:
Documento de índice
Cuando ingresa una URL como http://example.com, no está solicitando una página específica. En este caso, el servidor web proporcionará una página predeterminada que contiene el directorio que almacena el contenido del sitio web solicitado. Esta página predeterminada se denomina documento de índice, y en la mayoría de los casos se denomina index.html. Cuando configura un bucket para el alojamiento de sitios web, debe especificar un documento de índice. Cuando se envía una solicitud al dominio raíz o a cualquier subcarpeta, OBS devuelve este documento de índice.
Documento de error
Si se produce un error, OBS devuelve un documento de error HTML. Para errores 4XX, puede proporcionar su propio documento de error personalizado o proporcionar otras guías a los usuarios en este documento.
Redirección de todas las solicitudes
Si el dominio raíz es example.com y necesita responder a las solicitudes de http://example.com y http://www.example.com, puede crear dos los bucket llamados example.com y www.example.com. A continuación, puede conservar el contenido del sitio web en un solo bucket (como example.com) y configurar el otro bucket para redirigir todas las solicitudes al bucket de example.com.
Redirección basada en condiciones avanzadas
Puede redirigir las solicitudes basándose en el nombre o prefijo del objeto específico de la solicitud, o basándose en el código de respuesta. Por ejemplo, suponga que elimine o cambie el nombre de un objeto de un bucket. Puede agregar una regla de enrutamiento que redirija las solicitudes a otros objetos.
El formato sintáctico es el siguiente al establecer reglas de redirección de solicitudes específicas:
<WebsiteConfiguration> <IndexDocument> <Suffix>index.html</Suffix></IndexDocument> <ErrorDocument> <Key>SomeErrorDocument.html</Key> </ErrorDocument> <RoutingRules> RoutingRules…… </RoutingRules> </WebsiteConfiguration>
El formato sintáctico de RoutingRules es el siguiente. El contenido entre corchetes es opcional.
<RoutingRules> = <RoutingRules> <RoutingRule>...</RoutingRule> [<RoutingRule>...</RoutingRule> ...] </RoutingRules> <RoutingRule> = <RoutingRule> [ <Condition>...</Condition> ] <Redirect>...</Redirect> </RoutingRule> <Condition> = <Condition> [ <KeyPrefixEquals>...</KeyPrefixEquals> ] [ <HttpErrorCodeReturnedEquals>...</HttpErrorCodeReturnedEquals> ] </Condition> <Redirect> = <Redirect> [ <HostName>...</HostName> ] [ <Protocol>...</Protocol> ] [ <ReplaceKeyPrefixWith>...</ReplaceKeyPrefixWith> ] [ <ReplaceKeyWith>...</ReplaceKeyWith> ][ <HttpRedirectCode>...</HttpRedirectCode> ] </Redirect>
Para los elementos de solicitud necesarios para redirigir todas las solicitudes enviadas a un sitio web específico y para establecer reglas de redirección, consulte Configuración de alojamiento estático de sitios web para un bucket
Ejemplos:
Ejemplo 1: Modificación del prefijo de nombre de objeto para la redirección
Suponga que el bucket contenga los siguientes objetos:
index.html
docs/article1.html
docs/article2.html
Usted decide cambiar el nombre de la carpeta de docs/ a documents/. Después de la modificación, la solicitud de un objeto con el prefijo /docs debe ser redirigida a otro con documents/. Por ejemplo, la solicitud de docs/article1.html debe redirigirse a documents/article1.html.
En este caso, puede agregar las siguientes reglas de enrutamiento a la configuración del sitio web:
<RoutingRules> <RoutingRule> <Condition> <KeyPrefixEquals>docs/</KeyPrefixEquals> </Condition> <Redirect> <ReplaceKeyPrefixWith>documents/</ReplaceKeyPrefixWith> </Redirect> </RoutingRule> </RoutingRules>
Ejemplo 2: Redirección de solicitudes enviadas a carpetas eliminadas a una página especificada
Supongamos que ha eliminado la carpeta images/, es decir, que ha eliminado todos los objetos cuyo prefijo de nombre de objeto es images/. Puede agregar una regla de enrutamiento que redirija las solicitudes de todos los objetos cuyo prefijo es images/ a la página denominada folderdeleted.html.
<RoutingRules> <RoutingRule> <Condition> <KeyPrefixEquals>images/</KeyPrefixEquals> </Condition> <Redirect> <ReplaceKeyWith>folderdeleted.html</ReplaceKeyWith> </Redirect> </RoutingRule> </RoutingRules>
Ejemplo 3: Redireccionamiento cuando se producen errores HTTP
Supongamos que el objeto solicitado no se encuentra y que la solicitud debe ser redirigida a www.example.com. Puede agregar reglas de redirección para que los visitantes del sitio puedan redirigir a www.example.com cuando se devuelva el código de estado HTTP 404 (no encontrado). En el ejemplo siguiente también se inserta el prefijo de nombre de objeto report-404/ en la redirección. Por ejemplo, si solicita la página ExamplePage.html y causa un error HTTP 404, la solicitud será redirigida al informe de página report-404/ExamplePage.html en el www.example.com. Si no hay regla de enrutamiento y se produce el error 404 de HTTP, se devuelve el documento de error especificado en la configuración.
<RoutingRules> <RoutingRule> <Condition> <HttpErrorCodeReturnedEquals>404</HttpErrorCodeReturnedEquals > </Condition> <Redirect> <HostName>www.example.com</HostName> <ReplaceKeyPrefixWith>report-404/</ReplaceKeyPrefixWith> </Redirect> </RoutingRule> </RoutingRules>
Soporte de documentos de índice
Un documento de índice es una página web que se devuelve cuando se envía una solicitud a la raíz de un sitio o a cualquier subcarpeta. Por ejemplo, si el usuario introduce http://www.example.com en el navegador, el usuario no solicita ninguna página específica. En este caso, OBS proporciona documentos de índice, que a veces se denominan páginas predeterminadas.
Cuando configure su bucket como sitio web, proporcione el nombre del documento de índice. Debe cargar el objeto con este nombre y configurarlo para que sea público y accesible.
La barra diagonal final en la URL raíz es opcional. Por ejemplo, si configura un sitio web index.html como un documento de índice, index.html se devolverá a cualquiera de las siguientes URL:
http://bucketname.obs-website.example.com/ http://bucketname.obs-website.example.com
En OBS, los objetos se almacenan horizontalmente en los bucket. No proporciona ninguna organización jerárquica como sistema de archivos en un equipo. Puede crear una jerarquía lógica utilizando el nombre del objeto que representa la estructura de carpetas. Por ejemplo, considere un bucket con tres objetos y los siguientes nombres de objeto.
- sample1.jpg
- photos/2006/Jan/sample2.jpg
- photos/2006/Feb/sample3.jpg
Aunque no se almacenan como ninguna organización jerárquica física, puede inferir la siguiente estructura lógica de carpetas a partir del nombre del objeto.
- El objeto sample1.jpg se encuentra en el nivel raíz del bucket.
- El objeto sample2.jpg se encuentra en la subcarpeta photos/2006/Jan.
- El objeto sample3.jpg se encuentra en la subcarpeta photos/2006/Feb.
Soporte de documento de error personalizado
Tabla 1 enumera el subconjunto del código de respuesta HTTP devuelto por OBS cuando se produce un error.
Código de error HTTP |
Descripción |
---|---|
301 Moved Permanently |
Cuando un usuario envía una solicitud a un punto de conexión de OBS, se devuelve una respuesta 301 Moved Permanently. |
302 Found |
Cuando OBS recibe una solicitud de clave x que no termina con una barra diagonal, busca el objeto cuyo nombre de clave es x. Si no se encuentra el objeto, OBS determina que la solicitud se envía para la subcarpeta x. A continuación, OBS redirige la solicitud agregando una barra al final de la solicitud, y devuelve 302 Found. |
304 Not Modified |
Los usuarios de OBS solicitan los encabezados If-Modified-Since y If-Unmodified-Since para determinar si el objeto solicitado es el mismo que la copia almacenada en caché en el cliente. Si los objetos son los mismos, el nodo terminal de sitio web devuelve una respuesta 304 Not Modified . |
403 Forbidden |
Cuando la solicitud de usuario se convierte en un objeto que no puede leerse públicamente, la respuesta del nodo terminal de sitio web incluye 403 Forbidden. El propietario del objeto debe usar políticas de bucket o ACL para que el objeto sea público y accesible. |
404 Not Found |
La respuesta del nodo terminal del sitio web contiene 404 Not Found debido a las siguientes razones:
Puede crear documentos personalizados devueltos para 404 Not Found. Asegúrese de que el documento se ha cargado en el bucket configurado como sitio web y de que la configuración de alojamiento del sitio web se ha establecido para usar el documento. |
500 Service Error |
Cuando se produce un error de servidor interno, la respuesta del nodo de terminal de sitio web contiene 500 Service Error. |
503 Service Unavailable |
Cuando OBS determina que necesita reducir la frecuencia de solicitud, la respuesta del nodo terminal de sitio web contiene 503 Service Unavailable. |
Permisos requeridos para el acceso al sitio web
Cuando configuras un bucket como sitio web, debes hacer público y accesible el objeto que se va a proporcionar. Para realizar esta operación, debe escribir una política de bucket que conceda permisos de GetObject a todos. Si el objeto solicitado por el usuario no existe en el nodo terminal del sitio web, OBS devuelve el código de respuesta HTTP 404 Not Found. Si el objeto existe pero no concede permiso de lectura para el objeto, el nodo de terminal del sitio web devuelve el código de respuesta HTTP 403 Access Denied. Puede utilizar este código de respuesta para inferir si existe un objeto concreto. Si no necesita esta función, no habilite el soporte del sitio web del bucket.

En el escenario de alojamiento de sitios web estáticos, los usuarios anónimos deben tener acceso al archivo de sitio web estático alojado. Durante su acceso al archivo alojado, se incurrirán en tarifas por el tráfico de Internet saliente y las solicitudes.
La política de bucket de ejemplo siguiente otorga a cada persona el permiso para tener acceso a los objetos de una carpeta especificada. Para obtener más información acerca de las políticas de bucket, consulte Política de bucket.
{ "Statement":[{ "Sid":"PublicReadGetObject", "Effect":"Allow", "Principal": {"ID":"*"}, "Action":["GetObject"], "Resource":["example-bucket/*" ] } ] }

Una política de bucket solo se aplica a los objetos propiedad de un propietario de bucket. Si el bucket contiene objetos que no son propiedad del propietario del bucket, utilice las ACL de objetos para conceder el permiso de lectura pública a los objetos.
Puede usar políticas de bucket o ACL de objetos para conceder permisos de lectura pública a los objetos. Para utilizar las ACL para hacer que los objetos sean públicos y accesibles, puede conceder el permiso de lectura a todos, como se muestra en los siguientes elementos de autorización. Puede agregar el elemento de autorización a las ACL de objeto. Para obtener más información sobre la gestión de ACL, consulte ACL.
<Grant> <Grantee> <Canned>Everyone</Canned> </Grantee> <Permission>READ</Permission> </Grant>
Funciones relacionadas
Función |
Descripción de la relación |
Referencia |
---|---|---|
CORS |
De forma predeterminada, los sitios web estáticos alojados en un bucket OBS solo pueden responder a las solicitudes de acceso de sitios web en el mismo dominio. Puede configurar el uso compartido de recursos de origen cruzado (CORS) para el bucket de modo que se pueda acceder a los sitios web estáticos mediante solicitudes entre dominios. |
|
Configuración del nombre de dominio definido por el usuario |
OBS le permite usar un nombre de dominio definido por el usuario para acceder a sitios web estáticos alojados en un bucket de OBS. Puede utilizar el nombre de dominio original para acceder al sitio web sin modificar el código del sitio web. |
Configuración del nombre de dominio definido por el usuario Uso de un nombre de dominio definido por el usuario para alojar un sitio web estático |
Validación de URL |
OBS utiliza la validación de URL para evitar que sus sitios web alojados en un bucket OBS sean robados. OBS verifica las URL basadas en el campo de referencia en el encabezado HTTP. |
Cómo usarlo
Puede utilizar OBS Console, las API o los SDK para configurar CORS.
Herramienta |
Referencia |
---|---|
OBS Console |
|
SDKs |
OBS admite kits de desarrollo de software (SDK) en varios idiomas. Para obtener más información, consulte la guía para desarrolladores correspondiente en la página de Descripción de los SDK. |
API |
Configuración de Alojamiento Estático de Sitios Web para un Bucket |