Oh du fröhliche, Apple hat iOS 13 zum Download freigegeben. Mit folgender Konfiguration lädt man dieses Upgrade und alle zukünftigen Updates am Squid Proxy erfolgreich in den Cache.
Ein Full-Restore File zu iOS 13 via ITunes ist satte 3,9 GB groß. Über das Smartphone per WLAN ist dasselbe Update immerhin noch ca. 1,8 GB dick. Wäre es nicht schön, die Mitarbeiter bekommen dieses Update mit Full-Speed aus dem Cache des Proxies?
In meinem Fall hat der Squid Proxy bisher überhaupt nichts speziell gecached. Früher, vor 15 Jahren vielleicht, da mag so ein Cache noch toll gewesen sein. Aber heutzutage sind die Bandbreiten ja nicht mehr niedrig und die Browser cachen selbst.
Aber diese verflixte iOS Update ist dann doch jedes mal etwas groß. Wenn man hunderte Smartphones und Tablets verwalten muss lohnt sich das Caching, oder?
Squid Cache bereit machen
Ich gehe davon aus, der Squid hat ungefähr diese (noch) schlechten Caching Einstellungen in /etc/squid/squid.conf:
cache_dir aufs /var/spool/squid 2048 32 512 cache_mem 512 MB cache_mgr helpdesk@mycompany.de maximum_object_size 128 MB maximum_object_size_in_memory 512 KB cache_replacement_policy lru memory_replacement_policy lru
Das ändern wir jetzt auf einen Cache-Space von 16 GB:
cache_dir aufs /var/spool/squid 16384 32 512 cache_mem 512 MB cache_mgr helpdesk@mycompany.de maximum_object_size 15360 MB maximum_object_size_in_memory 512 KB cache_replacement_policy heap LFUDA memory_replacement_policy lru
Desweiteren darf eine einzelne Datei neuerdings satte 15 GB sein. Okay das ist übertrieben aber egal. Zuletzt sollte der Cache „die am wenigsten oft benutzten“ Files kicken, das geschieht mit cache_replacement_policy heap LFUDA
.
Squid Cache auf einzelne Domains beschränken
Noch vor der Zeile http_access deny all fügen wir folgene ACL ein:
acl cachedomains dstdomain .swcdn.apple.com .cdn-apple.com cache allow cachedomains
Meiner Beobachtung nach liefert Apple seit einigen Monaten die Updates fast ausschließlich über deren neuen CDN unter http://updates-http.cdn-apple.com/.* aus.
Squid Cache für Apple iOS Downloads konfigurieren
Jetzt muss der refresh_pattern für die iOS Updates hinterlegt werden. Wir wollen alle Dateiendungen .(ipsw|ipd|ipcc) zwischenspeichern, zudem soll der Cache überhaupt nicht geleert werden – es sei denn, er ist voll und ein neues Update kickt ein altes Update heraus.
Also fügen wir diese 2 Zeilen oberhalb aller anderen refresh_pattern hinzu:
refresh_pattern -i cdn\-apple\.com.*\.(ipsw|ipd|ipcc) 86400 100% 86400 ignore-reload ignore-no-store override-expire override-lastmod refresh_pattern -i swcdn\.apple\.com.*\.(ipsw|ipd|ipcc) 86400 100% 86400 ignore-reload ignore-no-store override-expire override-lastmod
In diesem Fall wird das Update 60 Tage (86400 Sekunden Minuten) im Cache behalten. Das ist so in etwa die Dauer bis ein neues Update von iOS zur Verfügung steht.
Die Optionen ignore-reload ignore-no-store override-expire override-lastmod
beziehen sich übrigens auf Squid 4.8 (latest-stable), alte Anleitungen erwähnen hier weitere Optionen die in Squid 4.8 nicht mehr gültig sind.
Übrigens: Apple liefert die Updates mit HTTP anstatt HTTPS aus, das macht ein Caching auch ohne SSL Bump (SSL Inspection, Man-in-the-Middle, nennt es wie ihr wollt) möglich. Wobei ich mich schon frage, warum Apple die Updates nicht auch mit HTTPS ausliefert !?
Klick.. Download.. Lichtgeschwindigkeeeeeiiit. Viel Spass mit dem Cache 🙂 !
5 Kommentare
Marcel · 21. September 2019 um 11:36
„In diesem Fall wird das Update 60 Tage (86400 Sekunden) im Cache behalten.“
86400 Sekunden sind 1 Tag. 60 Tage wären dann 5184000 Sekunden…
Schroeffu · 22. September 2019 um 07:41
Holla die Waldfee du hast natürlich recht! Ich korrigiere..
Schroeffu · 23. September 2019 um 10:42
Ich muss mich noch einmal korrigieren. Der refresh_pattern wird bei Squid „in minutes“ angegeben, daher kommt meine Zahl 86400 = 60 Tage, nur eben als Minuten. Beim Bloggen vorgestern hatte ich irrtümlicherweise Sekunden dazu geschrieben.
Ede · 22. Mai 2020 um 12:25
Hi,
funktioniert das Ganze noch und vor allem auch für APP updates?
Lt. meinen Logs wird aktuell eher via https und der URL itunes.apple.com ausgeliefert?
Danke & Gruß,
Ede
Schroeffu · 24. Dezember 2021 um 21:35
Hallo Ede,
deine Rückfrage habe ich übersehen, sorry! Falls hier ein Leser es noch interessiert: ja Caching von HTTPS klappt mit SSL Inspection, Squid nennt es SSL Bump.
Leider habe ich es nie ausprobiert App Updates aus dem Squid Cache auszuliefern, das wird aber funktionieren.
In meiner Umgebung haben wir alle Squid Proxies durch Enteprise Firewalls ausgetauscht, daher endet vorerst meine Blogposts zu Squid.
Viele Grüße
Schroeffu