我们有多种货币的magento商店。我们已经集成了自动货币交换机扩展。该模块适用于客户的IP地址。所以现在货币在启用清漆缓存后不会自动切换。所以请建议做什么? 提前谢谢。
答案 0 :(得分:0)
我认为您遇到的问题是由Varnish Cache触发的。
让我澄清一下。如果您安装并启用Varnich Cache,它将只能向Magento发送一次查询,直到页面被缓存。当发生这种情况时,Varnish不会允许您使用Magento向网络服务器发送更多查询。
因此,要解决此问题,您还需要将转换货币转移到Vanish服务器。
首先,您需要:
安装libvmod-geoip:https://github.com/lampeh/libvmod-geoip
配置VCL以检测客户的国家/地区
有几个例子说明如何在使用Varnish时获取GeoIP。查看下面的博客文章:
希望我能提供帮助。
答案 1 :(得分:0)
我认为这并不是真正的答案。但是,我有同样的问题。问题是清漆。我们需要更新其配置。
基本上,我们需要在您的Varnish配置中检查货币cookie(可以是自定义cookie)。
对于Magento,这里有一个很好的指南:
https://medium.com/@wegrzynowiczk/magento-varnish-and-geoip-1e7fd713ef8
if (req.http.Cookie ~ "customer_geoip_currency=") {
hash_data(regsub(req.http.Cookie, "^.*?customer_geoip_currency=([^;]*);*.*$", "\1"));
}
答案 2 :(得分:0)
疯狂地找到解决方案后,终于有了Magento 2.3.2 + Varnish + GeoIP的有效解决方案。要实现它,您可以使用非常容易实现的Cache Context
和Page Variations
。
首先在Magento\Framework\App\Http\Context
的模块中创建一个插件。
文件:app / code / Vendor / YourModule / etc / di.xml
<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd">
<type name="Magento\Framework\App\Http\Context">
<plugin name="atwix_country_cache_context_plugin"
type="Vendor\YourModule\Plugin\CustomerCountryCacheContextPlugin" />
</type>
</config>
然后执行插件
文件:Vendor / YourModule / Plugin / CustomerCountryCacheContextPlugin.php
/**
* Plugin on \Magento\Framework\App\Http\Context
*/
class CustomerCountryCacheContextPlugin
{
public function __construct(
\Magento\Customer\Model\Session $customerSession
) {
$this->customerSession = $customerSession;
}
/**
* \Magento\Framework\App\Http\Context::getVaryString is used by Magento to retrieve unique identifier for selected context,
* so this is a best place to declare custom context variables
*/
function beforeGetVaryString(\Magento\Framework\App\Http\Context $subject)
{
$country = $this->yourWayToGetTheCountry();
$defaultCountryContext = 'Brazil';
$subject->setValue('CONTEXT_AGE', $country, $defaultCountryContext);
}
}
最后一步是添加X-Magento-Vary
cookie,以在Varnish的HTTP层上传输上下文。
sub vcl_hash {
if (req.http.cookie ~ "X-Magento-Vary=") {
hash_data(regsub(req.http.cookie, "^.*?X-Magento-Vary=([^;]+);*.*$", "\1"));
}
... more ...
}
有关更多信息,请访问: