web-dev-qa-db-fra.com

Mettre en cache un site externe pouvant avoir une version mobile

Dans la suite de la réponse à la question " Nginx Reverse Proxy for Tumblr ", quel est le meilleur moyen de mettre en cache un site Web tel que Tumblr avec nginx, qui renvoie des résultats distincts en fonction de User-Agent?

D'une part, nous ne voudrions pas conserver une copie de cache distincte pour chaque chaîne d'agent utilisateur possible, ce qui serait insensé.

De l'autre côté, les informations sur les parties de la requête qu'ils utilisent pour déterminer quelle version servir, sont exclusives, de sorte que nous ne savons même pas de quoi il s'agit.

Quelle est la meilleure façon de faire la mise en cache avec le minimum de chances que des agents utilisateurs distincts polluent et perturbent le cache?

3
cnst

Vous avez raison de dire que la procuration est moins efficace lorsque le document comporte de nombreuses variantes pour différents clients. Dans ce cas, il semble qu'il n'y ait peut-être que deux versions, ce qui simplifie un peu le problème. La solution idéale serait un proxy basé sur un agent utilisateur. Cela servirait la version mobile aux clients mobiles et la version de bureau à d'autres clients.

Par exemple, il existe des expressions régulières qui pourraient être utilisées dans les règles de réécriture de nginx pour effectuer le proxy. De telles règles sont disponibles ici .

Voici comment vous pouvez l'implémenter dans nginx:

if ($http_user_agent ~* "/Mobile|Android|BlackBerry/") {
    proxy_pass    http://m.example.com$request_uri;
}

proxy_pass    http://www.example.com$request_uri;
1