我正在维护一个拥有3个不同版本的站点的网站,有3种不同的语言,用一个用php编写的单一系统来处理,它根据正在被访问的域名接受环境variables。 这三个网站是:
当myshop.com从俄罗斯访问它将被redirect到myshop.ru,并从欧洲的任何国家访问myshop.com,被redirect到myshop.eu,国际访客停留在myshop.com,虽然他们可以去国家特定的网站。 所有这些国家的redirect都是使用GeoIP apache2 mod来完成的,为了确定国家代码,在RewriteCondition中使用这个代码来表示一个RewriteRule,还有一些不重写的IP地址的例外,基本上是IP地址开发人员的电脑。 这个网站一直做得很好,直到我们决定build立清漆网站,这确实给了它一个很大的推动,但是国家特定的重写已经成为越野车。
开始发生的事情是,一个俄罗斯的访问者可以去myshop.com,不会被redirect,直到他点击一个随机链接(也许一个链接没有被caching清漆),用户被redirect到他们的国家。
对于这个我设置mod_rpaf和重写规则的例外(开发人员的ip),我用这个RewriteCond %{HTTP:X-FORWARDED-FOR} !^43\.43\.43\.43 ,我重新启动清漆和apache2,它工作了一段时间,然后又搞砸了。
整天我都在做改变,但是我不知道发生了什么事情,有时是有效的,有时候是不行的,有时甚至有一半是有效的。
至于geoip,我用一个php来检查$_SERVERvariables,这里是输出的一般想法
[HTTP_X_FORWARDED_FOR] => 43.43.43.44 [HTTP_X_VARNISH] => 1705675599 [SERVER_ADDR] => 127.0.0.1 [SERVER_PORT] => 80 [REMOTE_ADDR] => 43.43.43.44 [GEOIP_ADDR] => 43.43.43.44 [GEOIP_CONTINENT_CODE] => EU [GEOIP_COUNTRY_CODE] => FR [GEOIP_COUNTRY_NAME] => France
现在,由于“随机”redirect,我几乎不知道发生了什么,所以你们可以给我一些关于使用什么工具来debugging的想法吗? 我试图看到redirect日志,但他们真的不显示太多,varnishlog也没有什么帮助 – 虽然我必须承认,我不是专业的清漆。
我相信问题是清漆尝试caching的url,因此Apache的redirect没有做好,但访问该网站首先有一个redirect,并基于其他用户服务的内容,取决于从哪里用户当caching最后更新时,它是正确的吗? 如果是这样,我该如何解决这个问题?
另外,我可以select在varnish3上使用geoipredirect,而不是使用apache2来执行redirect,那么最佳实践是什么? 任何build议debugging或修复这将是有帮助的!
日Thnx!
有一些方法可以使用VCL中的内联C来让Varnish进行GeoIP检测。 您需要在此处执行此操作,以便在用户获得可能用于其他区域的caching页面之前进行redirect。
我仍然没有足够的权利来写评论,所以这就是为什么我会在这里发表我的答案。
基于这个问题,清漆是一个很大的机会,特别是如果你使用这样的设置:
varnish – > backend .com http服务器(根据IP规则决定在哪里redirect请求) – >(.ru | .eu)web服务器。
所以如果是这样的话,清漆不知道相同的地址/请求可以根据IP地址有不同的内容。 所以我想一旦清漆caching内容将保持在那里,直到它过期。
我会build议使用varnishlog并做一些模拟欧盟客户和RU的testing。 如果您无法从俄罗斯访问外部IP,请使用一些Amazon EC2实例:)
希望这会有所帮助。