Выбор валюты по умолчанию на основе геоипии позади лака

magento.stackexchange https://magento.stackexchange.com/questions/8058

  •  16-10-2019
  •  | 
  •  

Вопрос

Я хочу, чтобы магазин разумно выбрал валюту по умолчанию на основе IP -адреса клиента с использованием GEOIP при первом посещении (без предварительного выбранного валютного cookie). Магазин стоит за лаком, используя превосходное расширение Nexcess.

Расширение обрабатывает валюту, если стандартный печенье с валютой Magento устанавливается по данному запросу.

Мои мысли на этом этапе:

  1. Добавьте VCL в конфигурацию лака, чтобы выполнить поиск GeoIP (в C) и установите файл cookie на входящем запросе, если он, конечно, еще не установлен.
  2. Добавьте кэшированный блок для каждого пользователя, который выполняет поиск и устанавливает cookie (хотя это не будет применяться на загрузке первой страницы)

Я упускаю очевидную технику-может быть, какой-то клиентский JS-JS на пути URL, не связанного с виновником, который делает решимость?

Кто -нибудь знает Лучший способ сделать это?

Это было полезно?

Решение

У нас есть что -то подобное, работающее в производстве (мы позволяем или отключаем добавление в корзину и цены в зависимости от местоположения клиента).

Мы построили и установили «модуль Geoip Varnish» из https://github.com/leed25d/geoip-vmod ... Это устанавливает заголовок «X-Geoip» в каждом запросе, который достигает Magento, указывающего страну пользователя. В рамках Magento вам нужно обнаружить этот заголовок и настроить контент по мере необходимости.

Последняя проблема, которую нужно преодолеть, заключается в том, что лак будет кэшировать сгенерированную страницу и служить ее всем клиентам независимо от их страны. Вы можете «отключить» кэширование для этой страницы, но производительность страдает, так что это тоже не идеально. Наше решение состояла в том, чтобы отправить «различный» заголовок в нашем ответе HTTP, который говорит, что лак кэширует различные объекты для разных значений заголовка X-GeoIP, поэтому у нас есть различная страница, кэшированная для страны каждого посетителя.

Один из моих коллег в Aligent создал модуль Magento, который содержит помощника, чтобы получить код страны из заголовка X-Geoip (с запасной на IP, если он не присутствует, что полезно для разработки), и наблюдатель, чтобы отправить « Варьируется »заголовок. Мы открыли модуль, проверьте https://github.com/aligent/aligent_geoip Если вы хотите детали реализации.

Другие советы

Вы можете попробовать установить переменную сервера X-Forwarded-For и использовать ее с помощью Geoip

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

Я не делал этого раньше, но то, что это приходит мне в голову:

Используйте Libvmod-Geoip, чтобы определить код страны (не использовал это расширение лака, будьте осторожны ;-)) https://github.com/lampeh/libvmod-geoip

Затем вы расширяете функцию хэш через sub vcl_hash() Чтобы добавить код страны в кеш-писатели. Это позволяет вам кэшировать все на основе кода страны.

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

Вы также добавляете код страны в качестве заголовка, как set req.http.X-GeoIP = geoip.client_country_code(); Таким образом, сервер Magento может определить правильную страну и доставить правильные вещи.

Это просто идея, вам может потребоваться улучшить ее, но, надеюсь, поможет вам найти хорошее решение :)

Вы также можете получить доступ к файлам cookie клиентов и проверить на наличие кода/валюты страны и, если установлено, идти по-другому и не вызовать функцию Geoip ...

Вы предложили на кэширование пользователя, которое является безумием. Ваши тарифы в кэш -хэш будут почти не достоверными, в первую очередь использование лака. Не говоря уже о том, что лак будет очень усердно работать через свой механизм LRU, чтобы утилизировать старые записи для пользователя кэша, чтобы освободить место для новых записей пользователя кэша.

У вас есть несколько вариантов,

  1. Держите лак, используйте модуль GeoiP Varnish, используйте для каждого пользовательского кэширования, имейте 0% показателей удара и тратите все ресурсы вашего сервера на экземпляр лака.
  2. Держите лак, используйте модуль Geoip лака, используйте ESI для любого блока, связанного с валютой. Вам нужно будет кэшировать ESI, в противном случае, опять же, показатели ударов будут равны нулю.
  3. Держите лак, используйте модуль Geoip лака и просто измените свою структуру URL. Если у вас есть другой URL для каждой валюты (например, /USD, /can), то у вас будут непревзойденные показатели попадания, и это будет работать почти безупречно.
  4. Ручный лак, тогда все будет работать так, как задумано.
Лицензировано под: CC-BY-SA с атрибуция
Не связан с magento.stackexchange
scroll top