Caching Proxy mit Apache
Wenn man eine Linuxmaschine als Apache-Webserver am Laufen hat, lohnt es sich, eventuell darüber nachzudenken, den Squid-Proxy rauszuwerfen und dafür den Apachen zu verwenden. Weil die Konfiguration ein wenig aufwendiger ist, soll hier kurz erklärt werden, wie ein Caching Proxy mit Apache unter Debian-Linux aufzubauen ist.
Vorteile
- Kein Extra-Programm,
- braucht daher insgesamt weniger Ressourcen,
- Automatisch IPv6 fähig: Client spricht im LAN IPv6 zum Proxy, Proxy spricht nach außen hin beides, je nach Bedarf/Möglichkeit.
Nachteile
- Konfiguration komplexer als bei Squid,
- Squid als spezialisierte Lösung hat einige Features mehr wie z. B. ACLs (die aber i. d. R. nur selten gebraucht werden).
Konfiguration
Zu aktivierende Module:
- cache
- disk_cache
- proxy
- proxy_connect
- proxy_ftp
- proxy_http
for MODULE in cache disk_cache proxy proxy_connect proxy_ftp proxy_http; do a2enmod ${MODULE} done
In /etc/apache2/mods-available/disk_cache.conf muss der gesamte Inhalt auskommentiert werden.
Ausserdem muss der Apache auf einem separaten Proxyport lauschen. Das ist nicht anders lösbar, weil sonst der VHost für den Proxy mit dem Default-VHost für den Webserver kollidiert:
echo "Listen 8080" >> /etc/apache2/ports.conf
Nun sollte in der VHost-Konfiguration sichergestellt sein, dass es keine Überschneidungen mit den anderen Hosts gibt. Alle Dateien im Unterverzeichnis sites-enabled müssen geprüft werden, dass in der VHost-Definition eine Portangabe hinterlegt ist:
NameVirtualHost *:80 <VirtualHost _default_:80> … </VirtualHost> NameVirtualHost *:443 <VirtualHost _default_:443> … </VirtualHost>
Nun kann die Proxykonfiguration /etc/apache2/sites-available/proxy angelegt werden:
<IfModule mod_cache.c> CacheDefaultExpire 86400 CacheIgnoreNoLastMod On CacheMaxExpire 604800 CacheStoreNoStore On <IfModule mod_disk_cache.c> CacheRoot /var/spool/squid/apache2/ CacheEnable disk / CacheDirLevels 3 CacheDirLength 2 CacheMinFileSize 512 </IfModule> </IfModule> <VirtualHost _default_:8080> ServerName leela.pocnet.net AllowConnect 443 NoProxy .pocnet.net UseCanonicalName On ProxyDomain .pocnet.net ProxyReceiveBufferSize 0 ProxyStatus Full ProxyRequests On ProxyVia Off <Proxy *> AddDefaultCharset off Order deny,allow Deny from all Allow from 192.168.59.0/24 Allow from 2001:6f8:1296::/48 # Define the character set for proxied FTP directory listings ProxyFtpDirCharset UTF-8 </Proxy> ErrorLog /var/log/apache2/proxy_error.log CustomLog /var/log/apache2/proxy_access.log combined </VirtualHost>
Weitere Anpassungen
Nun muss noch der Platz für den Cache angepasst werden:
mkdir -p /var/spool/squid/apache2 chown root:root /var/spool/squid chmod 755 /var/spool/squid chown www-data:www-data /var/spool/squid/apache2 chmod 750 /var/spool/squid/apache2
Hier wurde /var/spool/squid/ verwendet, weil dies von Squid-Zeiten ein eigener Mountpoint ist.
Ebenso muss die Proxykonfiguration verlinkt und geladen werden:
cd /etc/apache2/sites-enabled ln -s ../sites-available/proxy . /etc/init.d/apache2 reload
Damit der Proxycache nicht ins Uferlose wächst, muss ein Cronjob dafür sorgen, dass aufgeräumt wird (Crontab vom User www-data), hier auf 400 MB beschränkt:
51 * * * * /usr/sbin/htcacheclean -v -t -p /var/spool/squid/apache2 -l400M
Um die separaten Logdateien muss man sich normalerweise nicht kümmern, logrotate schaut nach allen Dateien /var/log/apache2/*.log.