Выбор валюты по умолчанию на основе геоипии позади лака
Вопрос
Я хочу, чтобы магазин разумно выбрал валюту по умолчанию на основе IP -адреса клиента с использованием GEOIP при первом посещении (без предварительного выбранного валютного cookie). Магазин стоит за лаком, используя превосходное расширение Nexcess.
Расширение обрабатывает валюту, если стандартный печенье с валютой Magento устанавливается по данному запросу.
Мои мысли на этом этапе:
- Добавьте VCL в конфигурацию лака, чтобы выполнить поиск GeoIP (в C) и установите файл cookie на входящем запросе, если он, конечно, еще не установлен.
- Добавьте кэшированный блок для каждого пользователя, который выполняет поиск и устанавливает 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, чтобы утилизировать старые записи для пользователя кэша, чтобы освободить место для новых записей пользователя кэша.
У вас есть несколько вариантов,
- Держите лак, используйте модуль GeoiP Varnish, используйте для каждого пользовательского кэширования, имейте 0% показателей удара и тратите все ресурсы вашего сервера на экземпляр лака.
- Держите лак, используйте модуль Geoip лака, используйте ESI для любого блока, связанного с валютой. Вам нужно будет кэшировать ESI, в противном случае, опять же, показатели ударов будут равны нулю.
- Держите лак, используйте модуль Geoip лака и просто измените свою структуру URL. Если у вас есть другой URL для каждой валюты (например, /USD, /can), то у вас будут непревзойденные показатели попадания, и это будет работать почти безупречно.
- Ручный лак, тогда все будет работать так, как задумано.