Domanda

Voglio un negozio di scegliere in modo intelligente una valuta di default in base IP del cliente utilizzando GeoIP quando prima visita (con nessun cookie valuta preselezionato). Il negozio si trova dietro vernice usando eccellente estensione trementina di Nexcess.

Le maniglie di estensione valuta bene fino a quando il cookie valuta standard Magento è impostato su una determinata richiesta.

I miei pensieri in questa fase sono:

  1. Aggiungi VCL nel Varnish config di fare la ricerca GeoIP (in C) e impostare il cookie sul richiesta in entrata, se non è già impostato, naturalmente.
  2. Aggiungi un blocco per utente nella cache che fa la ricerca e imposta il cookie (anche se questo non sarebbe quindi applicare sulla prima caricamento della pagina)

Mi sto perdendo una tecnica ovvia -? Forse alcuni JS lato client per un percorso URL non vernici-cache che rende la determinazione

Qualcuno sa il migliore modo per fare questo?

È stato utile?

Soluzione

Abbiamo qualcosa di simile in esecuzione in produzione (stiamo attivando o disattivando Aggiungi al carrello e prezzi a seconda della posizione del cliente).

Abbiamo costruito e installato il modulo "Vernice GeoIP" da https://github.com/leed25d/geoip -vmod ... Questo imposta un "X-GeoIP" intestazione in ogni richiesta che raggiunge Magento indicazione del paese dell'utente. All'interno Magento è necessario rilevare questa intestazione e personalizzare i contenuti come richiesto.

L'ultimo problema da superare è che Varnish memorizza nella cache la pagina generata e servono a tutti i clienti indipendentemente dal loro paese. Si potrebbe "spegnere" la memorizzazione nella cache per quella pagina, ma soffre di prestazioni, in modo che non è l'ideale sia. La nostra soluzione era quella di inviare un "Vary" intestazione nella nostra risposta HTTP, che racconta Varnish per memorizzare nella cache oggetti diversi per differenti valori di intestazione X-GeoIP, quindi abbiamo una pagina diversa memorizzato nella cache per paese di ogni visitatore.

Uno dei miei colleghi di Aligent ha creato un modulo Magento che contiene un aiuto per andare a prendere il codice del paese dalla testata X-GeoIP (con fallback su IP se non è presente, che è utile per lo sviluppo), e un osservatore per inviare l'intestazione "Vary". Abbiamo open source il modulo, controlla https://github.com/aligent/Aligent_GeoIP se desidera che il dettaglio di implementazione.

Altri suggerimenti

Si può provare a impostare l'X-Forwarded-For variabile del server e utilizzare questo con geoip

 remove req.http.X-Forwarded-For;
 set req.http.X-Forwarded-For = client.ip;

Non ho fatto prima, ma ciò che questo è ciò che mi attraversa la mente:

Usa libvmod-geoip per determinare il codice del paese (non hanno utilizzato questa estensione vernici, fare attenzione ;-)) https://github.com/lampeh/libvmod-geoip

Poi si estende la funzione di hash tramite sub vcl_hash() per aggiungere il codice del paese per i tasti di cache. Che permette di cache di tutto sulla base del country-code.

sub vcl_hash {
    #...
    set req.hash += geoip.client_country_code();
    #...
}

È anche aggiungere il prefisso internazionale come intestazione, come set req.http.X-GeoIP = geoip.client_country_code(); in modo che il server di Magento è in grado di determinare il paese corretto e consegnare la roba corretta.

Questa è solo un'idea, potrebbe essere necessario per migliorarlo, ma si spera che vi aiuta a trovare una buona soluzione:)

È possibile anche accedere ai cookie di clienti e verificare la presenza di un country-code / valuta e, se impostato, andare un modo diverso e non chiamare la funzione geoip ...

È suggerito per la cache utente, che è una follia. Il vostro numero di cache saranno quasi nullo annullare qualsiasi vantaggio di utilizzare Varnish, in primo luogo. Per non parlare vernice dovrà lavorare molto duramente attraverso il suo meccanismo LRU per essere lo smaltimento del vecchio per voci di cache utente per fare spazio a nuove voci della cache per ogni utente.

Hai alcune opzioni,

  1. Mantenere la vernice, utilizzare il modulo di vernice GeoIP, utilizzo per la memorizzazione nella cache utente, ha colpito 0% i tassi e sprecare tutte le risorse il server per l'istanza di vernice.
  2. Mantenere la vernice, utilizzare il modulo di vernice GeoIP, utilizzare un ESI per qualsiasi blocco di valuta connessi. Avrai bisogno di memorizzare nella cache l'esi, in caso contrario, ancora una volta, i tassi di successo sarà pari a zero.
  3. Tenere Vernice, utilizzare il modulo GeoIP vernice, e basta cambiare la struttura degli URL. Se si dispone di un URL diverso per ogni valuta (ad es. / Usd, / può), allora si dovrà competenti partner frutto integrale, e funzionerà quasi impeccabile.
  4. Ditch per unghie, poi tutto funzionerà come previsto.
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a magento.stackexchange
scroll top