Question

Je veux un magasin pour choisir intelligemment une devise par défaut basée sur l'IP du client à l'aide GeoIP lors de leur première visite (sans biscuit présélectionné de monnaie). Le magasin est derrière Varnish en utilisant une excellente extension de térébenthine Nexcess.

Les poignées d'extension fine monnaie aussi longtemps que le standard cookie monnaie Magento est situé sur une requête donnée.

Mes pensées à ce stade sont:

  1. Ajouter VCL dans la config Varnish pour faire la recherche de GeoIP (en C) et réglez le cookie sur la demande entrante, si elle est pas déjà défini, bien sûr.
  2. Ajoutez un bloc qui ne cache par utilisateur la recherche et définit le cookie (bien que cela s'appliquerait pas sur la première page de chargement)

Suis-je manque une technique évidente - peut-être quelques-JS côté client à un chemin d'URL en cache-non-vernis qui rend la détermination

Est-ce que quelqu'un sait le meilleure façon pour ce faire?

Était-ce utile?

La solution

Nous avons obtenu quelque chose comme ça en cours d'exécution dans la production (nous activer ou désactiver ajouter au panier et le prix en fonction de l'emplacement du client).

Nous avons construit et installé le "module Varnish GeoIP" de https://github.com/leed25d/geoip -vmod ... Ceci définit un en-tête « X-GeoIP » dans chaque demande qui atteint Magento indiquant le pays de l'utilisateur. Au sein de Magento vous devez détecter cet en-tête et personnaliser le contenu selon les besoins.

Le dernier problème à résoudre est Varnish en cache la page générée et servir à tous les clients quel que soit leur pays. Vous pouvez « désactiver » la mise en cache pour cette page, mais souffre de performance, de sorte que ne est pas idéal non plus. Notre solution a été d'envoyer un « Varier » en-tête dans notre réponse HTTP, qui indique Varnish à mettre en cache des objets différents pour différentes valeurs de l'en-tête X-GeoIP, nous avons donc une autre page en cache pour le pays de chaque visiteur.

L'un de mes collègues Aligent a créé un module Magento qui contient une aide pour aller chercher le code de pays de l'en-tête X-GeoIP (avec fallback IP si ce n'est pas présente, ce qui est utile pour le développement), et un observateur envoyer l'en-tête « Varier ». Nous avons ouvert le code source du module, consultez https://github.com/aligent/Aligent_GeoIP si vous voulez les détails de mise en œuvre.

Autres conseils

Vous pouvez essayer de régler le X-Forwarded-For variable serveur et utiliser avec geoip

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