Php 如何使用varnish页面缓存在magento上启用geoip

Php 如何使用varnish页面缓存在magento上启用geoip,php,magento,apache2,varnish,geoip,Php,Magento,Apache2,Varnish,Geoip,我目前有3个在线商店,有3个不同的域,在centos上运行带有Apache和varnish(使用Phoenix页面缓存扩展)的magento 一家是英国的,一家是爱尔兰的,另一家是美国的 问题是(例如)如果一个美国用户点击了英国商店,我希望用户被通知去页面上正确的商店,(我不希望他们自动重定向) 我能够用maxmind数据库php pecl geoip来实现这一点,但随着我网站上用户的增加,我不得不开始使用varnish 如何在varnish上实现此功能,以便我知道用户来自哪个国家,以便向用户显

我目前有3个在线商店,有3个不同的域,在centos上运行带有Apache和varnish(使用Phoenix页面缓存扩展)的magento

一家是英国的,一家是爱尔兰的,另一家是美国的

问题是(例如)如果一个美国用户点击了英国商店,我希望用户被通知去页面上正确的商店,(我不希望他们自动重定向)

我能够用maxmind数据库php pecl geoip来实现这一点,但随着我网站上用户的增加,我不得不开始使用varnish


如何在varnish上实现此功能,以便我知道用户来自哪个国家,以便向用户显示消息以查看其相关网站?

您可以在Magento中使用JSON操作结果创建Crontroller。 然后可以使用JavaScript检查这些内容并输出结果


别忘了在Varnish中将控制器添加到withlist中。

Gunah,我想你没有抓住要点。 将Varnish放在Apache前面时,PHP将看到的客户端IP始终是Varnish的IP(如果它位于同一服务器中,则为127.0.0.1)

molleman,在这种情况下,您需要查看Varnish设置的X-Forwarded-For头,以获得真正的客户端IP。您可以在default.vcl中查看Varnish是如何设置的:

if (req.http.x-forwarded-for) {
    set req.http.X-Forwarded-For =
    req.http.X-Forwarded-For + ", " + client.ip;
} else {
    set req.http.X-Forwarded-For = client.ip;
}

如果您的web服务器在负载平衡器后面,那么您需要做更多的工作。请参阅此处了解解决方案:

如果是这种情况,您可能需要mod_rpaf(对于Apache 2.2)或mod_proxy(对于Apache 2.4),然后您将在PHP中的
$\u SERVER['REMOTE_ADDR']
中获得正确的值。