Caching Proxy mit Apache

Aus Knowledgebase
Wechseln zu: Navigation, Suche

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.

Weblinks