Я хочу, чтобы магазин разумно выбирал валюту по умолчанию на основе IP-адреса клиента, используя GeoIP при первом посещении (без предварительно выбранного cookie-файла с валютой). Магазин находится за Лаком, используя превосходное расширение Скипидара Nexcess.
Расширение обрабатывает штраф в валюте, если для данного запроса установлен стандартный файл cookie валюты Magento.
Мои мысли на этом этапе:
- Добавьте VCL в конфигурацию Varnish, чтобы выполнить поиск GeoIP (в C), и установите cookie для входящего запроса, если он, конечно, еще не установлен.
- Добавьте кешированный блок для каждого пользователя, который выполняет поиск и устанавливает cookie (хотя это не будет применяться при первой загрузке страницы)
Я упускаю очевидный метод - может быть, какой-нибудь JS на стороне клиента для пути URL без кэширования, который определяет?
Кто-нибудь знает лучший способ сделать это?
Я не делал этого раньше, но что мне приходит в голову:
Используйте libvmod-geoip для определения кода страны (не используйте это расширение для лака, будьте осторожны ;-)) https://github.com/lampeh/libvmod-geoip
Затем вы расширяете хеш-функцию,
sub vcl_hash()
добавляя код страны в ключи кеша. Это позволяет вам кэшировать все на основе кода страны.Вы также добавляете код страны в качестве заголовка, например,
set req.http.X-GeoIP = geoip.client_country_code();
чтобы сервер magento мог определить правильную страну и доставить правильный материал.Это всего лишь идея, возможно, вам нужно ее улучшить, но, надеюсь, поможет вам найти хорошее решение :)
Вы также можете получить доступ к файлам cookie клиентов и проверить код страны / валюту и, если установлено, пойти другим путем и не вызывать функцию geoip ...
источник
Вы предлагали для каждого пользователя кэширование, что является безумием. Ваш рейтинг попаданий в кэш будет почти нулевым, что лишит вас преимуществ использования Varnish. Не говоря уже о том, что Varnish будет очень усердно работать через механизм LRU, чтобы избавиться от старых записей кэша для каждого пользователя, чтобы освободить место для новых записей кэша для каждого пользователя.
У вас есть несколько вариантов,
источник