Вибір валюти за замовчуванням на основі GeoIp за лаком


14

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

Розширення обробляє валюту штрафом до тих пір, поки для заданого запиту встановлено стандартне печиво валюти Magento.

Мої думки на цьому етапі:

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

Чи я пропускаю очевидну методику - можливо, якийсь клієнтський JS для URL-адреси, який не керується лаком, який визначає?

Хтось знає найкращий спосіб зробити це?

Відповіді:


4

У нас щось подібне працює у виробництві (ми вмикаємо або вимикаємо додавання у кошик та ціни залежно від місцезнаходження замовника).

Ми створили та встановили модуль "Varnish GeoIP" від https://github.com/leed25d/geoip-vmod ... Це встановлює заголовок "X-GeoIP" у кожному запиті, що надходить до Magento із зазначенням країни користувача. У Magento потрібно виявити цей заголовок і налаштувати вміст за потребою.

Кінцева проблема, яку треба подолати, полягає в тому, що Varnish буде кешувати створену сторінку та обслуговувати її для всіх клієнтів незалежно від країни. Ви можете "вимкнути" кешування для цієї сторінки, але продуктивність страждає, тому це теж не ідеально. Нашим рішенням було надіслати заголовок "Варі" у відповіді на HTTP, який вказує Varnish кешувати різні об'єкти для різних значень заголовка X-GeoIP, тому у нас є різні сторінки, кешовані для кожної країни відвідувача.

Один з моїх колег з Aligent створив модуль Magento, який містить помічника для отримання коду країни із заголовка X-GeoIP (із запасом до IP, якщо його немає, що корисно для розробки), та спостерігача для надсилання " Заголовок ". Ми відкрили джерело модуля, ознайомтеся з https://github.com/aligent/Aligent_GeoIP, якщо ви хочете детальніше про реалізацію.


1

Ви можете спробувати встановити змінну сервера X-Forwarded-For і використовувати це за допомогою geoip

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

Але це допоможе лише бекенду правильно встановити валюту для першого запиту на сторінці продукту. Другий та наступні перегляди цієї сторінки будь-якого користувача будуть кешовані Varnish, і таким чином код валюти в бекенде не буде працювати правильно? Я думаю, що налаштування файлу cookie за замовчуванням має відбутися до того, як він потрапить у бекенд?
Ешлі Шродер

AJAX або ESI включають, якщо ваше розширення magento-лак підтримує його.
Дмитро Завалкін

1

Я цього раніше не робив, але що це, що перетинає мою думку:

Використовуйте 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 ...


0

Ви запропонували кешування користувачів на кожного користувача, це безумство. Ваша швидкість показів кешу буде майже нульовою, що скасовує в першу чергу будь-яку користь від використання лаку. Не кажучи вже про те, що Varnish буде працювати надто наполегливо через механізм LRU, щоб утилізувати старі записи в кеш-пам'яті користувача, щоб створити місце для нових записів кешу користувача.

У вас є кілька варіантів,

  1. Зберігайте лак, використовуйте модуль геоізоляції лаку, використовуйте кеш на користувач, майте 0% частоти показів і витрачайте всі ресурси вашого сервера на екземпляр лаку.
  2. Зберігайте лак, використовуйте модуль geoip для лаку, використовуйте ESI для будь-якого блоку, пов’язаного з валютою. Вам потрібно буде кешувати esi, інакше, знову ж таки, кількість показів буде нульовою.
  3. Зберігайте лак, використовуйте модуль геоізоляції лаку та просто змініть структуру URL-адреси. Якщо у вас є різний URL для кожної валюти (наприклад, / usd, / can), тоді ви матимете злочинну ставку звернень, і вона буде працювати майже бездоганно.
  4. Лав канаву, тоді все буде працювати за призначенням.
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.