varnish3, mod_geoip com apache2 usando mod_rewrite e mod_rpaf

1

Estou mantendo um website com 3 versões diferentes do site, com 3 linguagens diferentes, manipuladas com um único sistema escrito em php, que coleta variáveis de ambiente baseadas no nome de domínio que está sendo acessado. Estes são os três sites:

  • myshop.com: versão internacional em inglês
  • myshop.eu: versão européia do site
  • myshop.ru: versão russa do site

quando myshop.com é acessado da rússia, ele deve ser redirecionado para myshop.ru, e qualquer país da europa acessa myshop.com, é redirecionado para myshop.eu, e os visitantes internacionais ficam em myshop.com, embora eles possam ir para o site específico do país. Todos esses redirecionamentos para o país são feitos usando o mod GeoIP apache2 para determinar o código do país, que é usado em um RewriteCondition para indicar um RewriteRule, existem algumas exceções de IPs que não fazem a reescrita, basicamente os IPs do PCs do desenvolvedor. O site está indo muito bem, até que decidimos configurar o verniz para dar um impulso ao site, ele realmente deu um grande impulso, mas as reescritas específicas do país tornaram-se problemáticas.

O que começou a acontecer é que um visitante russo pode ir ao myshop.com e não será redirecionado, até que ele clique em um link aleatório (talvez um link não colocado em cache pelo verniz ainda) e o usuário seja redirecionado para seu país específico .

Para isso eu configurei mod_rpaf, e para exceções à regra de reescrita (para o ip do desenvolvedor), eu usei esse RewriteCond %{HTTP:X-FORWARDED-FOR} !^43\.43\.43\.43 , e eu reiniciei o verniz e o apache2, funcionou por um tempo, então ele estragou novamente. / p>

E todo o dia eu tenho feito mudanças, mas eu não tenho a menor idéia do que está acontecendo, às vezes funciona, e às vezes não tem, e às vezes funciona meio, etc ...

Quanto ao geoip, usei um php para verificar a variável $_SERVER , e aqui está a idéia geral da saída

[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

Agora, graças aos redirecionamentos "aleatórios", dificilmente tenho uma pista sobre o que está acontecendo, então vocês podem me dar algumas idéias sobre quais ferramentas usar para depurar isso? Eu tentei ver os logs de redirecionamento, mas eles realmente não mostram muito, e vernizlog não está ajudando muito - embora eu deva admitir que eu não sou profissional em verniz.

Acredito que o problema esteja no verniz tentando armazenar o URL em cache e, portanto, os redirecionamentos do apache não estão sendo feitos corretamente, mas o site primeiro tem um redirecionamento e, com base nele, outros usuários recebem o conteúdo, dependendo de onde o usuário foi quando o cache foi atualizado pela última vez, está correto? se sim, como posso resolver o problema?

Além disso, eu tenho a opção de usar redirecionamentos geoip no verniz3 ao invés de usar o apache2 para fazer os redirecionamentos, é essa a melhor prática? Qualquer sugestão para depurar isso ou consertar isso seria útil!

thnx!

    
por mercy 28.06.2012 / 14:33

2 respostas

1

Existem maneiras de usar C inline em seu VCL para que o Varnish faça sua detecção GeoIP. Você precisa fazer isso para redirecionar antes que o usuário receba uma página em cache que possa ser destinada a uma região diferente.

link

    
por 28.06.2012 / 16:56
0

Ainda não tenho direitos suficientes para escrever um comentário, por isso vou postar a minha resposta aqui.

Com base no problema, há uma grande chance de que o verniz seja a causa, especialmente se você usar uma configuração como essa:

verniz - > backend .com servidor http (que decide com base em regras de IP onde redirecionar a solicitação) - > (.ru | .eu) servidor web.

Portanto, se esse for o caso, o verniz não tem a menor idéia de que o mesmo endereço / solicitação pode ter um conteúdo diferente com base no endereço IP. Então eu acho que uma vez que o cache de verniz, o conteúdo vai mantê-lo lá até que expire.

O que eu recomendaria é usar o varnishlog e fazer alguns testes emulando um cliente da UE e um do RU. Se você não tem acesso a um IP externo da Rússia, use apenas algumas instâncias do Amazon EC2:)

Espero que isso ajude.

    
por 29.06.2012 / 07:31