Descargar redirecciones que no sean de regex a Fastly en lugar de Nginx (rutas)

En este tema se sugiere una solución a un problema típico de rendimiento de redirecciones que podría tener al descargar redirecciones que no son de regex a Fastly en lugar de Nginx en Adobe Commerce en la infraestructura en la nube.

Productos y versiones afectados

  • Adobe Commerce en la nube (todas las versiones) Master/Production/Staging entornos que aprovechan Fastly

Problema

En Adobe Commerce en la infraestructura de la nube, no se pueden realizar grandes cantidades de redirecciones/reescrituras que no sean de regex en la capa Nginx y, como resultado, pueden causar problemas de rendimiento.

Causa

El archivo routes.yaml del directorio .magento/routes.yaml define las rutas para su Adobe Commerce en la infraestructura de la nube.

Si el tamaño del archivo de routes.yaml es de 32 KB o más, debería descargar las redirecciones y reescrituras que no sean de regex en Fastly.

Esta capa Nginx no puede administrar un gran número de redirecciones/reescrituras que no sean regex, de lo contrario se producirán problemas de rendimiento.

Solución

La solución consiste en descargar esas redirecciones que no sean de regex a Fastly. Cree una ruta de error genérica para redirigir a Fastly.

Los siguientes pasos detallarán cómo colocar redirecciones en Fastly en lugar de Nginx.

  1. Crear un diccionario de Edge.

    Primero, puede usar VCL fragmentos de código en Adobe Commerce para definir un diccionario de Edge. Esto contendrá las redirecciones.

    Algunas advertencias a esto:

    • Fastly no puede regex en las entradas de diccionario. Es sólo una coincidencia exacta. Para obtener más información sobre estas limitaciones, consulte los documentos de Fastly sobre las limitaciones de los diccionarios de Edge.

    • Fastly tiene un límite de 1000 entradas en un solo diccionario. Fastly puede ampliar este límite, pero eso lleva a la tercera advertencia.

    • Cada vez que actualiza las entradas e implementa ese(a) VCL actualizado(a) en todos los nodos, hay un aumento geométrico del tiempo de carga con diccionarios ampliados; es decir, un diccionario de 2000 entradas cargará de 3x-4x más lento que un diccionario de 1000 entradas. Pero eso es solo un problema cuando está implementando VCL (actualizando el diccionario o cambiando el código de función VCL).

      No influye en el tiempo que tarda Fastly en procesar una solicitud; solo influye en el tiempo que tarda Fastly en expulsar una nueva configuración.

      En términos generales, los cambios de configuración tardan unos segundos de media, no suelen superar los 5-10 segundos. Por lo tanto, un aumento del doble en los elementos de diccionario tarda más de 30 segundos en implementar la configuración. Un aumento de 4 veces tomaría cerca de 2 minutos. Esto nos lleva a la cuarta advertencia.

    • Hay un límite bastante estricto de 10 000 entradas en un diccionario de Edge.

    Se recomienda consolidar en la lista de redirecciones. Puede usar varios diccionarios, pero tenga en cuenta que cualquier actualización que haga en su VCL tardará varios minutos en propagarse a lo largo de Fastly.

  2. Comparar URL con los diccionarios.

    Cuando se realice la búsqueda URL, se realizará la comparación para aplicar el código de error personalizado si se encuentra una coincidencia.

    Use otro fragmento de código VCL para agregar algo similar a lo siguiente a vcl_recv:

    code language-none
         declare local var.redir-path STRING;
         set var.redir-path = table.lookup(redirects, std.tolower(req.url), "");
    
         if (var.redir-path != "") {
           error 912 var.redir-path;
         }
    

    Aquí estamos comprobando si URL existe en la entrada de tabla. Si es así, llamaremos a un error Fastly interno y pasaremos a ese error el redireccionamiento URL desde la tabla.

  3. Administrar el redireccionamiento.

    Cuando se encuentra una coincidencia, se realiza la acción definida para ese(a) obj.status, en este caso una redirección de movimiento permanente 301.

    Use un último fragmento de código en vcl_error para devolver los códigos de error 301 al cliente:

    code language-none
      if (obj.status == 912) {
         set obj.http.location = obj.response;
         set obj.status = 301;
         set obj.response = "Moved Permanently";
         return(deliver);
           }
    

    Con este bloque, estamos comprobando si el código de error pasado desde vcl_recv coincide y, si es así, estableceremos la ubicación en el mensaje de error pasado, luego cambiaremos el código de estado a 301 y el mensaje a "Movido permanentemente". En ese momento, la respuesta debe estar lista para volver al cliente.

Servicio de fase

WARNING
Si desea probar todos estos pasos, se recomienda configurar un entorno de ensayo de Adobe Commerce. De este modo, puede ejecutar pruebas en el servicio Fastly para asegurarse de que todo se comporta como cabría esperar.

Si no desea ejecutar un entorno de ensayo de Adobe Commerce, pero desea ver el aspecto que tendrían estas redirecciones, puede configurar una cuenta de ensayo directamente en Fastly.

Lectura relacionada

recommendation-more-help
8bd06ef0-b3d5-4137-b74e-d7b00485808a