自动货币开关无法使用magento中的varnish缓存来处理nginx

时间:2014-03-13 07:40:25

标签: magento nginx varnish

我们有多种货币的magento商店。我们已经集成了自动货币交换机扩展。该模块适用于客户的IP地址。所以现在货币在启用清漆缓存后不会自动切换。所以请建议做什么? 提前谢谢。

3 个答案:

答案 0 :(得分:0)

我认为您遇到的问题是由Varnish Cache触发的。

让我澄清一下。如果您安装并启用Varnich Cache,它将只能向Magento发送一次查询,直到页面被缓存。当发生这种情况时,Varnish不会允许您使用Magento向网络服务器发送更多查询。

因此,要解决此问题,您还需要将转换货币转移到Vanish服务器。

首先,您需要:

有几个例子说明如何在使用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 ContextPage 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 ...
}

有关更多信息,请访问:

https://angular.io/guide/component-styles

https://devdocs.magento.com/guides/v2.3/extension-dev-guide/cache/page-caching/public-content.html#configure-page-variations