Squid StoreId rewrite
Un truc que j’ai cherché à faire avec Squid est de mettre en cache les téléchargements que docker fait pour construire ses images afin qu’il ne re-télécharge pas systématiquement tout.
Pas compliqué, il suffit d’augmenter la taille max des fichiers a cacher et du répertoire de cache :
Mais j’ai surtout eu un problème avec le téléchargement des JRE & JDK Oracle. En effet, le lien demande une authentification et redirige alors vers la même URL mais avec une query-string :
devient
Et biensur le AuthParam change à chaque fois. Du coup Squid considère le fichier comme un nouveau fichier et le remet en cache a chaque fois. C’est que qu’on appelle la duplication. Pas gênant pour les petits fichiers, beaucoup plus pour les gros.
Pour palier ce problème dans Squid 3.4 (pas avant) il est possible de re-écrire le StoreId. Pour cela, il faut commence par récupérer le programme perl store-id.pl que je rajoute ici au cas où :
Attention, ce fichier doit être exécutable ! Ensuite dans le fichier squid.conf on active la mise en cache des query-string en remplaçant :
par
Puis on ajoute les lignes suivantes :
store_id_programest le chemin vers le programme perl avec en argument le fichier de mapping des urlsstore_id_childrenpermet de paramétrer les sous-process, 5 max, 1 au départ.
Reste enfin le fichier de mappin d’URL a ajouter. Il est sous la forme :
- Regex de l’url
- tabulation
- URL re-ecrite
Exemple :
Attention que la tabulation ne soit pas remplacer par défaut par votre éditeur de texte. Pour être sûr, on peut utiliser cette commande :
Cela va nettoyer le fichier de base pour être certain qu’il soit bon. Tout un listing d’url est donné en exemple dans la doc Squid : http://wiki.squid-cache.org/Features/StoreID/DB