Configurar rutas de servicio

Media CDN proporciona funciones avanzadas de enrutamiento HTTP que le permiten asignar el tráfico a configuraciones perimetrales y orígenes específicos de manera pormenorizada.

Configurar una regla de ruta

Configura una regla de ruta para un servicio de Media CDN.

Consola

  1. En la Google Cloud consola, ve a la página Media CDN.

    Ir a Media CDN

  2. Para abrir la página Detalles del servicio en el que quiere configurar una regla de ruta, haga clic en el nombre del servicio.

  3. Para cambiar al modo de edición, haz clic en el botón Editar.

  4. Para ir a la sección Enrutamiento, haz clic en Siguiente.

  5. Especifique al menos una regla de host. Haga clic en Añadir regla de host. A continuación, haz lo siguiente:

    1. En Hosts, especifica al menos un host para la coincidencia.

    2. En Descripción, escribe una breve descripción de la regla de host.

    También puedes hacer clic en la flecha para desplegar una regla de host y editarla.

  6. Especifique al menos una regla de ruta. Haz clic en Añadir regla de ruta.

    También puedes editar una regla de ruta haciendo clic en Editar en la fila correspondiente.

  7. En el panel Editar regla de ruta, en Prioridad, asigna un valor a la prioridad de la ruta.

  8. En Descripción, escribe una breve descripción que te ayude a identificar la regla en una lista de reglas.

  9. En la sección Coincidencia, especifique al menos una condición de coincidencia. Haz clic en Añadir una condición de coincidencia. A continuación, haz lo siguiente:

    1. En Tipo de concordancia, selecciona cualquier opción de concordancia de ruta.
    2. En Coincidencia de ruta, especifique los nombres, las rutas o las plantillas. Considera la posibilidad de usar la coincidencia con patrones comodín.

      Si es necesario, selecciona también Habilitar distinción entre mayúsculas y minúsculas para el valor de la ruta.

    3. Opcional: Seleccione Los encabezados coinciden y Los parámetros de consulta coinciden. A continuación, haz clic en los botones correspondientes para añadir encabezados y parámetros de consulta. En cada uno, especifique el nombre, el tipo de concordancia y el valor.

      Para obtener más información, consulta Coincidencia con encabezados y parámetros de consulta.

    4. Para guardar la condición de coincidencia, haz clic en Hecho.

  10. En Acción principal, selecciona una de las siguientes opciones:

    • Obtener de un origen: para dirigir las solicitudes a un origen específico, selecciona esta opción y, a continuación, elige un origen.

    • Redirección de URL: para redirigir solicitudes, seleccione esta opción. A continuación, especifica el tipo de redirección, la ruta y el código de estado.

      De forma opcional, selecciona las opciones para redirigir todas las respuestas a HTTPS o para quitar la consulta.

  11. Haz clic en Configuraciones avanzadas.

    1. En la sección Acción del encabezado, haz clic en Añadir un elemento.

      Seleccione un tipo de acción y, a continuación, especifique un encabezado como par de nombre y valor. A continuación, haga clic en Hecho.

    2. En la sección Acción de ruta, haz clic en Añadir un elemento.

      Especifica un tipo de acción y sus opciones relacionadas. A continuación, haga clic en Hecho.

  12. En Filtrado por método HTTP, selecciona Personalizar filtrado por método HTTP.

    A continuación, selecciona los métodos HTTP que quieras que se envíen a tu origen a través del proxy.

  13. Para guardar la regla de ruta, haz clic en Guardar.

  14. Para guardar los cambios en el servicio, haz clic en Actualizar servicio.

gcloud y YAML

  1. Exporta tu configuración de Media CDN a un archivo YAML. Usa el comando gcloud edge-cache services export.

    gcloud edge-cache services export SERVICE_NAME \
        --destination=FILENAME.yaml
    

    Haz los cambios siguientes:

    • SERVICE_NAME: el nombre de tu servicio
    • FILENAME : el nombre del archivo YAML
  2. Actualiza el archivo YAML con la configuración necesaria, tal como se describe en las secciones de esta página.

  3. Para actualizar el servicio, importa tu configuración de Media CDN desde el archivo YAML. Usa el comando gcloud edge-cache services import.

    gcloud edge-cache services import SERVICE_NAME \
        --source=FILENAME.yaml
    

Solicitudes de coincidencia

Una configuración de Media CDN contiene un conjunto de rutas definidas en la sección Enrutamiento de un recurso EdgeCacheService. Estas rutas coinciden con las solicitudes en función de (al menos) un host. Para obtener más información sobre cómo se dirige el tráfico a un origen, consulta HostRule y PathMatcher. Cada ruta puede definir su propia configuración de CDN, reescrituras, redirecciones, políticas de CORS, encabezados HTTP personalizados y asignación de origen. Las rutas pueden compartir orígenes.

Por ejemplo, puedes enrutar las solicitudes de manifiestos a un origen específico y definir un TTL de caché de corta duración y una política de almacenamiento en caché negativo. Las solicitudes de segmentos se pueden dividir en otro origen mediante encabezados y parámetros de consulta para separar tipos de manifiesto o usuarios específicos.

En el siguiente ejemplo se muestra cómo enrutar las solicitudes que coinciden con un encabezado, un parámetro de consulta y un prefijo de ruta específicos para el host media.example.com:

name: prod-service
routing:
  hostRules:
  - hosts:
    - media.example.com
    pathMatcher: example_routes
  pathMatchers:
  - name: example_routes
    routeRules:
    - priority: 10
      origin: staging-live-origin
      matchRules:
      - prefixMatch: /vod/
        headerMatches:
        - headerName: "x-staging-client"
          presentMatch: true
        queryParameterMatches:
        - name: "live"
          exactMatch: "yes"
      routeAction:
        cdnPolicy:
          defaultTtl: 5s

Coincidencia de ruta

Media CDN admite la coincidencia de rutas completa (exacta), de prefijo y con comodines. La coincidencia de rutas se puede combinar con la coincidencia basada en host, encabezado y parámetros de consulta para crear reglas de enrutamiento de solicitudes detalladas.

A continuación, se indican tres formas de buscar coincidencias en una ruta de URL.

Campo Descripción Ejemplo
matchRules[].fullPathMatch La condición fullPathMatch coincide con la ruta de URL completa, que no incluye la cadena de consulta. Debes especificar barras diagonales al final, si procede.

Una ruta con una regla de coincidencia de fullPathMatch: "/stream/" coincide con /stream/, pero no con /stream ni con /stream/us/hls/1234.ts.

Una fullPathMatch es una coincidencia explícita (exacta).

matchRules[].prefixMatch La condición prefixMatch coincide con el prefijo de la ruta de la URL. Las URLs que empiezan por la misma cadena coinciden.

Una ruta con una regla de coincidencia prefixMatch: "/videos/" coincide con /videos/hls/58481314/manifest.m3u8 y /videos/dash porque ambas contienen el prefijo /videos/.

matchRules[].pathTemplateMatch La condición pathTemplateMatch admite operadores comodín, lo que le permite encontrar coincidencias con patrones de URL y segmentos de ruta complejos, así como capturar variables con nombre para reescribir URLs.

Una ruta con una regla de coincidencia pathTemplateMatch: "/**.m3u8" coincide con cualquier ruta de URL que termine en .m3u8.

Tanto /content/en-GB/13/51491/manifest_193193.m3u8 como /p/abc/1234/manifest_1080p5000.m3u8 coinciden con este patrón.

Para ver más ejemplos, consulta la sección Coincidencia de patrones.

Para obtener más información, consulta la especificación de la API de MatchRule.

Por ejemplo, para que coincidan todas las solicitudes que empiecen por /stream/, cree una regla de ruta similar a la siguiente:

name: prod-service
routing:
  hostRules:
  - hosts:
    - media.example.com
    - *.vod.example.com
    pathMatcher: example_routes
  pathMatchers:
  - name: example_routes
    routeRules:
    - priority: 1
      matchRules:
      - prefixMatch: /stream/

En este ejemplo se incluye explícitamente la barra inclinada final en la regla de coincidencia:

  • Una solicitud a media.example.com/stream/id/1234/hls/manifest.m3u8 coincide con esta ruta.
  • Una solicitud a media.example.com/stream-eu/id/4567/hls/manifest.m3u8 no coincide con esta ruta.

En el segundo caso, Media CDN devuelve un error HTTP 404, a menos que se haya configurado otra ruta o una ruta comodín.

Para obtener información sobre cómo funciona la precedencia en las rutas con prefijos similares, consulta la sección Prioridad y orden de ruta.

Coincidencia con patrones (comodines)

La coincidencia de patrones le permite buscar coincidencias con varias partes de una URL, incluidas las URL parciales y los sufijos (extensiones de archivo), mediante la sintaxis de comodines.

También puede asociar uno o varios segmentos de ruta con variables con nombre en un campo pathTemplateMatch y, a continuación, hacer referencia a esas variables al reescribir la URL en un campo pathTemplateRewrite. De esta forma, puedes reordenar y quitar segmentos de URL antes de que se envíe la solicitud a tu origen.

En el siguiente ejemplo se muestra cómo puedes hacer coincidir dos sufijos de URL diferentes:

# EdgeCacheService.routing.pathMatchers[]
    routeRules:
    - priority: 1
      description: "Match video segments"
      matchRules:
      - pathTemplateMatch: "/**.ts"
      - pathTemplateMatch: "/**.m4s"
      origin: prod-video-storage

La sintaxis admitida incluye lo siguiente:

Operador Coincide con Ejemplo
* Coincide con un solo segmento de ruta hasta el siguiente separador de ruta: / /videos/*/*/*.m4s coincide con /videos/123414/hls/1080p5000_00001.m4s.
** Coincide con cero o más segmentos de ruta. Si está presente, debe ser el último operador. /**.mpd coincide con /content/123/india/dash/55/manifest.mpd.
{name} or {name=*}

Una variable con nombre que coincide con un segmento de ruta.

Coincide con un solo segmento de ruta hasta el siguiente separador de ruta: /.

/content/{format}/{lang}/{id}/{file}.vtt coincide /content/hls/en-us/12345/en_193913.vtt y captura format="hls", lang="en-us", id="12345" y file="en_193913" como variables.
{name=videos/*} Una variable con nombre que coincide con más de un segmento de ruta. El segmento de ruta que coincide con videos/* se captura como variable con nombre. /videos/{language=lang/*}/* coincide con /videos/lang/en/video.m4s y asigna a la variable de ruta language el valor lang/en.
{name=**}

Una variable con nombre que coincide con cero o más segmentos de ruta.

Si está presente, debe ser el último operador.

/**.m3u8 o /{path=**}.m3u8 coinciden con todos los segmentos de ruta hasta la extensión.

/videos/{file=**} coincide con /videos/en-GB/def566/manifest.m3u8, incluida la extensión, y captura la variable de ruta file="en-GB/def566/manifest.m3u8.

Notas:

  • Si no vas a reescribir una URL, usa los operadores * y **, que son más sencillos.
  • Cuando se usan variables para capturar segmentos de ruta, las partes de la URL que no se capturan con una variable no se pueden hacer referencia en un pathTemplateRewrite posterior. Para ver un ejemplo, consulta la sección Capturar variables de ruta.
  • No puedes hacer referencia a variables en un pathTemplateRewrite posterior que no existan en el pathTemplateMatch de la misma ruta.
  • Las variables distinguen entre mayúsculas y minúsculas. {FORMAT}, {forMAT} y {format} representan variables y valores diferentes.
  • Puede especificar hasta 10 operadores (comodines o variables) en una coincidencia. Los campos pathTemplateMatch y pathTemplateRewrite no deben superar los 255 caracteres.

Ejemplo: buscar coincidencias en una extensión de archivo

En el siguiente ejemplo se muestra un caso práctico habitual de los operadores comodín: hacer coincidir todos los segmentos de ruta hasta un sufijo.

En este caso, haz lo siguiente:

  • Obtiene los manifiestos de vídeo (listas de reproducción) que terminan en .m3u8 y .mpd del origen del manifiesto y aplica un TTL corto (5 segundos) a estas respuestas porque cambian con frecuencia.
  • Obtiene los segmentos de vídeo que terminan en .ts y .m4s del origen del segmento y aplica un TTL más largo (1 día) a estas respuestas.

Este enfoque se suele utilizar cuando se usan servicios de SSAI (inserción de anuncios en el servidor) o DAI (inserción dinámica de anuncios), así como en vídeos en directo en los que el archivo de manifiesto se actualiza cada pocos segundos.

En la siguiente configuración se muestra cómo configurar el enrutamiento de Media CDN para admitir esta opción:

name: prod-service
routing:
  hostRules:
  - hosts:
    - media.example.com
    pathMatcher: example_routes
  pathMatchers: