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-lastmodbeziehen 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 🙂 !

Kategorien: Linux

Schroeffu

Der Autor ist Schweizer, verheiratet, seit November 2015 zu seiner liebevollen Frau nach Braunschweig, Deutschland, ausgewandert. Als Vater von inzwischen zwei Kindern kommt das Bloggen hoffentlich nicht zu kurz.

3 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.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.