Offload non-regex reindirizzamenti a Fastly invece di Nginx (route)

In questo argomento viene suggerita una soluzione a un problema di prestazioni tipico dei reindirizzamenti che potrebbe verificarsi quando si scaricano reindirizzamenti non regex a Fastly invece di Nginx in Adobe Commerce sull'infrastruttura cloud.

Prodotti e versioni interessati

  • Adobe Commerce sull'infrastruttura cloud (tutte le versioni) Master/Production/Staging ambienti che sfruttano Fastly

Problema

In Adobe Commerce sull'infrastruttura cloud, un numero elevato di reindirizzamenti/riscritture non regex non può essere eseguito al livello Nginx e, di conseguenza, può causare problemi di prestazioni.

Causa

Il file routes.yaml nella directory .magento/routes.yaml definisce le route per l'infrastruttura cloud di Adobe Commerce.

Se la dimensione del file routes.yaml è pari o superiore a 32 KB, è necessario scaricare i reindirizzamenti/riscritture non regex in Fastly.

Questo livello Nginx non può gestire un numero elevato di reindirizzamenti/riscritture non regex, altrimenti si verificheranno problemi di prestazioni.

Soluzione

La soluzione è quella di scaricare i reindirizzamenti non regex a Fastly. Creare un percorso di errore generico per reindirizzare a Fastly.

Nei passaggi seguenti verrà descritto come inserire i reindirizzamenti in Fastly anziché in Nginx.

  1. Crea un dizionario Edge.

    È innanzitutto possibile utilizzare VCL snippet in Adobe Commerce per definire un dizionario perimetrale. Conterrà i reindirizzamenti.

    Alcune avvertenze:

    • Fastly non può fare regex sulle voci del dizionario. È solo una corrispondenza esatta. Per ulteriori informazioni su queste limitazioni, consulta la documentazione di Fastly sulle limitazioni del dizionario Edge.

    • Fastly ha un limite di 1000 voci in un singolo dizionario. Fastly può espandere questo limite, ma questo comporta la terza avvertenza.

    • Ogni volta che aggiorni le voci e distribuisci che aggiorni VCL in tutti i nodi, si verifica un aumento geometrico del tempo di caricamento con i dizionari in espansione, il che significa che un dizionario di 2000 voci verrà caricato 3 volte e 4 volte più lentamente di un dizionario di 1000 voci. Ma questo è un problema solo quando distribuisci VCL (aggiornando il dizionario o modificando il codice della funzione VCL).

      Non influisce sul tempo necessario a Fastly per elaborare una richiesta; influisce solo sul tempo necessario a Fastly per inviare una nuova configurazione.

      In generale, i cambiamenti di configurazione richiedono in media alcuni secondi, di solito non più di 5-10 secondi. Pertanto, un aumento raddoppiato degli elementi del dizionario richiede fino a 30 secondi per implementare la configurazione. Un aumento di 4x richiederebbe meno di 2 minuti. Questo porta alla quarta avvertenza.

    • Esiste un limite piuttosto rigido di 10.000 voci in un dizionario Edge.

    Si consiglia vivamente di consolidare l’elenco dei reindirizzamenti. È possibile utilizzare più dizionari, ma qualsiasi aggiornamento apportato a VCL richiederà alcuni minuti per essere effettivamente popolato in Fastly.

  2. Confrontare URL con i dizionari.

    Quando si verifica la ricerca URL, questo eseguirà il confronto per applicare il codice di errore personalizzato se viene trovata una corrispondenza.

    Utilizzare un altro frammento VCL per aggiungere qualcosa di simile al seguente 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;
         }
    

    Qui stiamo verificando se URL esiste nella voce della tabella. In caso contrario, verrà chiamato un errore interno Fastly e verrà passato all'errore il reindirizzamento URL dalla tabella.

  3. Gestire il reindirizzamento.

    Quando viene trovata una corrispondenza, viene eseguita l'azione definita per tale obj.status, in questo caso un reindirizzamento di spostamento permanente 301.

    Utilizzare uno snippet finale in vcl_error per inviare nuovamente i codici di errore 301 al client:

    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 questo blocco, stiamo verificando se il codice di errore trasmesso da vcl_recv corrisponde e, in tal caso, imposteremo il percorso sul messaggio di errore trasmesso, quindi modificheremo il codice di stato in 301 e il messaggio in "Spostato definitivamente". A questo punto, la risposta dovrebbe essere pronta per tornare al client.

Servizio stage

WARNING
Se desideri provare tutti questi passaggi, ti consigliamo vivamente di impostare un ambiente di staging Adobe Commerce. In questo modo è possibile eseguire test sul servizio Fastly per verificare che tutto si comporti come previsto.

Se non si desidera eseguire un ambiente di gestione temporanea di Adobe Commerce, ma si desidera verificare l'aspetto di questi reindirizzamenti, è possibile impostare un account di gestione temporanea direttamente su Fastly.

Lettura correlata

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