Estos contenidos se han traducido de forma automática para su comodidad, pero Huawei Cloud no garantiza la exactitud de estos. Para consultar los contenidos originales, acceda a la versión en inglés.
Centro de ayuda> Object Storage Service> Guía del usuario> Alojamiento de sitio web estático
Actualización más reciente 2023-04-27 GMT+08:00

Alojamiento de sitio web estático

Consideraciones

Por motivos de seguridad y cumplimiento, utilizar el alojamiento de sitios web estático a través del nombre de dominio 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-Shanghai2, and CN South-Guangzhou

March 25, 2022: CN-Hong Kong, AP-Bangkok, AP-Singapore, AF-Johannesburg, LA-Mexico City1, LA-Mexico City2, LA-Sao Paulo1, and LA-Santiago

Todavía puede utilizar el alojamiento de sitios web estático a través de un nombre de dominio definido por el usuario. De esta manera, el contenido aún se puede previsualizar. Para obtener más información, consulte ¿Cómo previsualizo objetos en OBS a través de un explorador?

Escenario de la aplicación

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.

Figura 1 Alojamiento de sitio web estático

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 depósito.

Solicitud soportada

Se admiten operaciones en todos los bucket y objetos.

Sólo se admiten las solicitudes GET y HEAD en objetos.

Respuesta a solicitudes GET y HEAD de nivel raíz de cubo

Se devuelve una lista de claves de objeto en un bucket.

Se devuelve el archivo de índice especificado en la configuración.

Visión general 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

Informació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 ingresas una URL como http://example.com, no estás 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 encaminamiento 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.

Tabla 1 Lista de códigos de error de OBS

Código de error HTTP

Descripción

301 Moved Permanently

Cuando un usuario envía una solicitud a un endpoint 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 añadiendo 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:

  • OBS determina que se hace referencia a una clave de objeto no válida en la dirección URL del sitio web.
  • La OBS determina que la solicitud es para un documento de índice que no existe.
  • El bucket especificado en la URL no existe.
  • El bucket especificado en la URL existe pero no está configurado como sitio web.

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 acerca de cómo gestionar ACL, vea 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.

CORS

Vinculación de 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 OBS. Puede utilizar el nombre de dominio original para acceder al sitio web sin modificar el código del sitio web.

Vinculación de 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.

Validación de URL

¿Cómo usar esta función?

Puede utilizar la consola OBS, las API o los SDK para configurar CORS.

Herramienta

Referencia

Consola de OBS

Configurar el alojamiento de sitios web estáticos

SDK

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 general del SDK.

API

Configuración de Alojamiento Estático de Sitios Web para un Bucket