Wybór domyślnej waluty w oparciu o GeoIp za lakierem

14

Chcę, aby sklep inteligentnie wybrał domyślną walutę na podstawie adresu IP klienta przy użyciu GeoIP podczas pierwszej wizyty (bez wcześniej wybranego pliku cookie waluty). Sklep znajduje się za Lakierem przy użyciu doskonałej terpentyny Nexcess.

Rozszerzenie obsługuje walutę, o ile standardowe ciasteczko walutowe Magento jest ustawione na dane żądanie.

Moje myśli na tym etapie to:

  1. Dodaj VCL do konfiguracji Varnish, aby wykonać wyszukiwanie GeoIP (w C) i ustaw ciasteczko na żądanie przychodzące, jeśli oczywiście nie jest jeszcze ustawione.
  2. Dodaj buforowany blok dla poszczególnych użytkowników, który dokonuje wyszukiwania i ustawia plik cookie (jednak nie będzie to miało zastosowania przy ładowaniu pierwszej strony)

Czy brakuje mi oczywistej techniki - może jakiś JS po stronie klienta do ścieżki URL niebuforowanej w pamięci podręcznej, która determinuje?

Czy ktoś zna najlepszy sposób to zrobić?

Ashley Schroder
źródło

Odpowiedzi:

4

Mamy coś takiego uruchomionego w produkcji (włączamy lub wyłączamy dodawanie do koszyka i ceny w zależności od lokalizacji klienta).

Zbudowaliśmy i zainstalowaliśmy „Moduł GeoIP Varnish” z https://github.com/leed25d/geoip-vmod ... Ustawia nagłówek „X-GeoIP” w każdym żądaniu, które dociera do Magento, wskazując kraj użytkownika. W Magento musisz wykryć ten nagłówek i dostosować treść zgodnie z wymaganiami.

Ostatnim problemem do rozwiązania jest to, że Varnish zbuforuje wygenerowaną stronę i udostępni ją wszystkim klientom, niezależnie od ich kraju. Możesz „wyłączyć” buforowanie dla tej strony, ale wydajność spada, więc też nie jest to idealne. Naszym rozwiązaniem było wysłanie w odpowiedzi HTTP nagłówka „Vary”, który nakazuje Varnishowi buforowanie różnych obiektów dla różnych wartości nagłówka X-GeoIP, więc mamy inną stronę w pamięci podręcznej dla kraju każdego odwiedzającego.

Jeden z moich kolegów z Aligent stworzył moduł Magento, który zawiera pomocnika do pobrania kodu kraju z nagłówka X-GeoIP (z rezerwą na adres IP, jeśli nie jest obecny, co jest przydatne do programowania) oraz obserwatora, który wysyła „ Zmieniaj nagłówek. Otworzyliśmy moduł źródłowy, sprawdź https://github.com/aligent/Aligent_GeoIP, jeśli chcesz szczegółów implementacji.

Jim OHalloran
źródło
1

Możesz spróbować ustawić zmienną serwera X-Forwarded-For i użyć jej z geoip

 remove req.http.X-Forwarded-For;
 set req.http.X-Forwarded-For = client.ip;
Anton S.
źródło
Pomoże to jednak backendowi poprawnie ustawić walutę dla pierwszego żądania wypowiedzenia strony produktu. Drugie i kolejne wyświetlenia tej strony produktu przez dowolnego użytkownika będą buforowane przez Varnish, więc kod waluty w backendie nie będzie działał, prawda? Myślę, że domyślne ustawienie pliku cookie musi się zdarzyć, zanim trafi ono do backendu?
Ashley Schroder,
AJAX lub ESI obejmują, jeśli twoje rozszerzenie magento-lakier obsługuje to.
Dmytro Zavalkin,
1

Nie robiłem tego wcześniej, ale to, co przychodzi mi na myśl:

Użyj libvmod-geoip, aby określić kod kraju (nie używaj tego rozszerzenia lakieru, bądź ostrożny ;-)) https://github.com/lampeh/libvmod-geoip

Następnie rozszerzasz funkcję skrótu, sub vcl_hash()aby dodać kod kraju do kluczy pamięci podręcznej. To pozwala buforować wszystko na podstawie kodu kraju.

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

Dodajesz również kod kraju jako nagłówek, tak set req.http.X-GeoIP = geoip.client_country_code();aby serwer magento mógł określić właściwy kraj i dostarczyć poprawne rzeczy.

To tylko pomysł, być może trzeba go poprawić, ale mam nadzieję, że pomoże ci znaleźć dobre rozwiązanie :)

Możesz również uzyskać dostęp do plików cookie klientów i sprawdzić kod kraju / walutę, a jeśli jest ustawiony, pójdź inną drogą i nie wywoływaj funkcji geoip ...

ciało
źródło
0

Zasugerowałeś buforowanie na użytkownika, co jest szaleństwem. Twój wskaźnik trafień w pamięci podręcznej prawie nie spowoduje utraty korzyści z używania Lakieru. Nie wspominając już, że Varnish będzie pracował bardzo ciężko dzięki swojemu mechanizmowi LRU, aby pozbyć się starych wpisów pamięci podręcznej użytkownika, aby zrobić miejsce na nowe wpisy pamięci podręcznej użytkownika.

Masz kilka opcji,

  1. Zachowaj lakier, korzystaj z modułu geoip lakieru, używaj pamięci podręcznej na użytkownika, uzyskuj 0% trafień i marnuj wszystkie zasoby serwera na instancję lakieru.
  2. Zachowaj lakier, użyj modułu geoip lakieru, użyj ESI dla dowolnego bloku związanego z walutą. Będziesz musiał buforować esi, w przeciwnym razie ponownie liczba trafień wyniesie zero.
  3. Zachowaj Varnish, użyj modułu geoip lakieru i po prostu zmień strukturę adresu URL. Jeśli masz inny adres URL dla każdej waluty (np. / Usd, / can), wówczas będziesz mieć niesłabnące wskaźniki trafień i będzie działać prawie bezbłędnie.
  4. Ditch Varnish, wtedy wszystko będzie działać zgodnie z przeznaczeniem.
choco-loo
źródło