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.
-
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.
-
-
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.
-
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
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
- Fastly VCL riferimento
- Configurare le route nella documentazione per gli sviluppatori
- Configurazione Fastly nella documentazione per gli sviluppatori
- VCL scheda di riferimento rapido per espressioni regolari nella documentazione per gli sviluppatori
- Best practice per la modifica delle tabelle del database nel playbook di implementazione di Commerce