Caching-HTTP-Proxy mit geringer Latenz und für den Benutzer sichtbarem Cache-Verzeichnis

Ich habe nach einem Caching-HTTP-Proxy für Linux mit den folgenden Eigenschaften gesucht:

  • Eigenständig: Ich möchte lieber nicht mit zB meiner vorhandenen Apache- oder Squid-Konfiguration herumspielen.

  • Niedrige Latenz: Das heißt, es sollte alle Daten beim Abrufen weiterleiten, ohne darauf zu warten, dass die gesamte Datei zuerst heruntergeladen wird. Die Gesamtleistung ist jedoch nicht von besonderer Bedeutung - normalerweise hat es nur höchstens einen oder zwei Clients, die Dateien im Bereich von 1 bis 100 MB herunterladen.

  • Zwischenspeichern unter Verwendung eines Formats, das es ermöglicht, die zwischengespeicherten Dateien direkt zu verwenden und/oder zu ändern. Könnte zB http://example.com/a/b/file.txtin platziert werden <cachedir>/http/example.com/a/b/file.txt.

  • (Optional) Ein gewisses Maß an Konfigurierbarkeit, sodass z. B. alle www*.example.comURLs demselben Verzeichnis zugeordnet werden, um doppelte Spiegel zu vermeiden. Ein Python-Programm, das man ein wenig modifizieren kann, könnte auch geeignet sein ...

Ich muss Header oder Dateiinhalte nicht wirklich ändern – der Proxy wird hauptsächlich verwendet, um Softwareaktualisierungsdateien für mehrere VMs und physische Maschinen freizugeben, ohne die Verbindung zum Internet unnötig zu belasten.

Antworten (2)

Polipo

sollte die Rechnung passen, mit einer Einschränkung.

Eigenständig: Ich möchte lieber nicht mit zB meiner vorhandenen Apache- oder Squid-Konfiguration herumspielen.

Installieren Sie es einfach (keine anderen Abhängigkeiten als die Standardbibliothek) und konfigurieren Sie es nach Bedarf (Sie möchten wahrscheinlich den Port ändern , wenn Squid bereits auf 8123 lauscht, und Sie möchten andere Clients als localhost zulassen . Auch gegeben Ihre Anforderungen können Sie das asynchrone Schreiben deaktivieren .

Niedrige Latenz: Das heißt, es sollte alle Daten beim Abrufen weiterleiten, ohne darauf zu warten, dass die gesamte Datei zuerst heruntergeladen wird. Die Gesamtleistung ist jedoch nicht von besonderer Bedeutung - normalerweise hat es nur höchstens einen oder zwei Clients, die Dateien im Bereich von 1 bis 100 MB herunterladen.

Prüfen. (Im Gegensatz zu wwwoffle , das ich sehr mag, aber systematisch Seiten puffert, bis sie vollständig heruntergeladen sind.)

Zwischenspeichern unter Verwendung eines Formats, das es ermöglicht, die zwischengespeicherten Dateien direkt zu verwenden und/oder zu ändern. Könnte zB http://example.com/a/b/file.txtin platziert werden <cachedir>/http/example.com/a/b/file.txt.

Nah dran. Proxys werden normalerweise nicht file.txtin einer aufgerufenen Datei gespeichert file.txt, da URLs nicht gut zur Dateisyntax passen: Es ist beispielsweise möglich, dass foound foo/oder foo/barund unterschiedliche Inhalte bereitstellen. foo//barPolipo speichert eine Datei pro Datei, aber der Dateiname ist der MD5-Hash der URL (codiert in Base64) in einem Verzeichnis mit dem Namen „host“.

Außerdem enthält der Inhalt der Datei die Header. Wenn Sie den eigentlichen Inhalt wollen, müssen Sie die Header entfernen, zB mit sed -e '1,/^\r\?$/d'.

Ich erwähne Polipo trotz dieser Einschränkungen, da die meisten Proxys wahrscheinlich so funktionieren, es sei denn, sie sollen in eingeschränkten Setups verwendet werden, in denen sie nicht zuverlässig auf alle Webseiten zugreifen können.

(Optional) Ein gewisses Maß an Konfigurierbarkeit, sodass z. B. alle www*.example.com-URLs demselben Verzeichnis zugeordnet werden, um doppelte Mirrors zu vermeiden. Ein Python-Programm, das man ein wenig modifizieren kann, könnte auch geeignet sein ...

Machbar mit umgeleiteten URLs .

Ich verwende Polipo bereits seit einiger Zeit, sowohl als Proxy als auch zum Bereitstellen statischer Dateien. Nicht perfekt, aber für die meisten meiner Anwendungen ausreichend...

Ich würde wetten, dass genau das existiert, aber nur für den Fall, dass dies nicht der Fall ist:

CernVM-FS ( docs , github ) interpretiert eine feste Website als Dateisystem mit Langzeit-Caching. Wenn Sie wieder als Website darauf zugreifen möchten, können Sie einen lokalen HTTP-Server in diesem Verzeichnis einrichten.

Diese Lösung ist nicht eigenständig und verarbeitet nur eine Website, ist aber möglicherweise dennoch relevant.