ワニスの背後にあるGeoIpベースのデフォルト通貨選択


14

ストアに、GeoIPを使用して顧客が最初にアクセスしたときに、事前に選択された通貨Cookieを使用せずに、顧客のIPに基づいてデフォルトの通貨をインテリジェントに選択したい。ストアは、Nexcessの優れたTurpentineエクステンションを使用してVarnishの背後にあります。

拡張機能は、標準のMagento通貨Cookieが特定の要求に設定されている限り、通貨を正常に処理します。

この段階での私の考えは次のとおりです。

  1. もちろん、VCLをVarnish構成に追加してGeoIPルックアップ(C)を実行し、受信リクエストにCookieを設定します(まだ設定されていない場合)。
  2. 検索を実行してCookieを設定するユーザーごとのキャッシュブロックを追加します(ただし、これは最初のページの読み込みには適用されません)

私は明らかなテクニックを見逃していますか?おそらく、クライアントサイドのJSがニスをキャッシュしていないURLパスに決定しますか?

誰でもこれを行う最良の方法を知っていますか?

回答:


4

実稼働環境でこのような機能を実行しています(顧客の場所に応じて、カートへの追加と価格設定を有効または無効にします)。

https://github.com/leed25d/geoip-vmodから「Varnish GeoIPモジュール」を構築およびインストールしました。これにより、ユーザーの国を示すMagentoに到達する各リクエストに「X-GeoIP」ヘッダーが設定されます。Magento内で、このヘッダーを検出し、必要に応じてコンテンツをカスタマイズする必要があります。

克服すべき最後の問題は、Varnishが生成されたページをキャッシュし、国に関係なくすべての顧客に提供することです。そのページのキャッシュを「オフ」にすることもできますが、パフォーマンスが低下するため、理想的でもありません。私たちの解決策は、HTTP応答で「Vary」ヘッダーを送信することでした。これは、X-GeoIPヘッダーの異なる値に対して異なるオブジェクトをキャッシュするようVarnishに指示するため、訪問者の国ごとに異なるページがキャッシュされます。

Aligentの同僚の1人が、X-GeoIPヘッダーから国コードを取得するヘルパーを含むMagentoモジュールを作成しました(存在しない場合はIPにフォールバックし、開発に役立ちます)。 Vary」ヘッダー。モジュールをオープンソース化しました。実装の詳細については、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;

しかし、それはバックエンドが製品ページを言う最初のリクエストの通貨を正しく設定するのを助けるだけです。ユーザーによるその製品ページの2番目以降のビューはVarnishによってキャッシュされるため、バックエンドの通貨コードは正しく実行されませんか?Cookieのデフォルト設定は、バックエンドに到達する前に行う必要があると思いますか?
アシュリーシュレーダー

magento-varnish拡張がサポートしている場合、AJAXまたはESIが含まれます。
ドミトロZavalkin

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

ユーザーごとのキャッシュを提案しましたが、これは狂気です。キャッシュヒット率は、最初にニスを使用する利点をほとんど無効にします。言うまでもなく、ワニスはLRUメカニズムを通じて非常に一生懸命に働き、古いユーザーごとのキャッシュエントリを破棄して、新しいユーザーごとのキャッシュエントリのためのスペースを確保します。

いくつかのオプションがありますが、

  1. ニスを保持し、ニスジオップモジュールを使用し、ユーザーごとのキャッシュを使用し、ヒット率を0%にし、ニスインスタンス上のすべてのサーバーリソースを浪費します。
  2. ワニスを保持し、ワニスジオイプモジュールを使用し、通貨関連ブロックにESIを使用します。ESIをキャッシュする必要があります。そうしないと、ヒット率がゼロになります。
  3. Varnishを保持し、ニスのgeoipモジュールを使用して、URL構造を変更するだけです。通貨ごとに異なるURL(例:/ usd、/ can)がある場合、ヒット率は低下せず、ほぼ問題なく機能します。
  4. ワニスを捨てると、すべてが意図したとおりに機能します。
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.