我希望一家商店在初次访问时使用GeoIP根据客户的IP明智地选择默认货币(没有预选的货币cookie)。该商店使用Nexcess出色的松节油扩展名而在清漆后面。

只要根据给定的请求设置标准的Magento货币饼干,该扩展就可以处理货币罚款。

我在这个阶段的想法是:

  1. 将VCL添加到清漆配置中以进行GeoIP查找(在C中),并在入站请求(如果尚未设置)上设置cookie。
  2. 添加一个执行查找并设置cookie的每个用户缓存块(尽管这将不应用于首页加载)

我是否错过了明显的技术 - 也许有一些客户端的JS到制定确定的非varnish网址?

有人知道吗 最好的 这样做的方法?

有帮助吗?

解决方案

我们在生产中有类似的东西(我们正在启用或禁用推车并根据客户的位置进行定价)。

我们从 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 如果您想要实现细节。

其他提示

您可以尝试设置X-Forwarded For Server变量,并将其与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功能...

您建议每个用户缓存,这是疯狂的。首先,您的缓存命中率几乎将无效使用清漆的任何好处。更不用说Varnish将通过其LRU机制来努力工作,以便处理每个用户缓存条目,以腾出每个用户缓存条目的空间。

您有一些选择,

  1. 保持清漆,使用Varnish GeoIP模块,使用每个用户缓存,具有0%的命中率,并在清漆实例上浪费所有服务器资源。
  2. 保持清漆,使用清漆地理模块,将ESI用于任何相关货币块。您需要将ESI缓存,否则,命中率将是零。
  3. 保持清漆,使用清漆地理模块,然后更改您的URL结构。如果您对每种货币有不同的URL(例如 /usd, /can),那么您的命中率不高,并且几乎可以完美地工作。
  4. 沟渠清漆,然后一切都会按预期工作。
许可以下: CC-BY-SA归因
scroll top