Content Komprimierung mit mod_deflate und Apache 2

Warum soll ich meinen Content Komprimieren?

Hierfür gibt es einige Argumente:

  1. Verringerung der nötigen Bandbreite, Verkleinerung des Volumens der Seite
  2. Ggf. schneller Ladezeiten beim Nutzer
  3. Good Style ;-)

Tatsächlich ist es so, das heute viele Webseiten auf Komprimierung Ihrer Daten setzen, dies ist mit modernen CPUs und effektiven Modulen wie mod_deflate, selbst bei hochvolumigen Seiten, kein Problem mehr. Hiermit kann ohne großen Aufwand massiv Bandbreite gespart werden, da nahezu alle modernen Browser mit komprimierten Inhalten umgehen können. Nach meinen Erfahrungen kann man locker 10 bis 20% Traffic einsparen, aber auch hier ist das ganze natürlich abhängig von den lokalen Gegebenheiten.

Hier eine Beispielkonfiguration im Apache:

#Maximize Compression
DeflateCompressionLevel 9
<Location />
# Insert filter
SetOutputFilter DEFLATE

# Netscape 4.x has some problems…
BrowserMatch ^Mozilla/4 gzip-only-text/html

# Netscape 4.06-4.08 have some more problems
BrowserMatch ^Mozilla/4\.0[678] no-gzip

# MSIE masquerades as Netscape, but it is fine
# BrowserMatch \bMSIE !no-gzip !gzip-only-text/html

# NOTE: Due to a bug in mod_setenvif up to Apache 2.0.48
# the above regex won’t work. You can use the following
# workaround to get the desired effect:
BrowserMatch \bMSI[E] !no-gzip !gzip-only-text/html

# Don’t compress images
SetEnvIfNoCase Request_URI \
\.(?:gif|jpe?g|png)$ no-gzip dont-vary

# Make sure proxies don’t deliver the wrong content
Header append Vary User-Agent env=!dont-vary

</Location>

Mit dem Parameter „DeflateCompressionLevel“ setzt man, wie bei gzip auch, die Stärke der Kompression. 9 ist das Maximum und 1 das schwächste. Dies kann man je nach Serverleistung variieren, wobei das ganze mit mod_deflate ziemlich effizient ist und ich auch mit einem 9 nur einen sehr geringen Anstieg der Serverlast hatte (Server mit mehreren Million Zugriffen/Tag). Der Rest der Konfiguration ist 1 zu 1 aus dem Apache Handbuch kopiert und ich hatte bisher nie Probleme damit.


Date Wed, 20 Jan 2010 08:12:01 GMT
Content-Type text/html;charset=ISO-8859-15
Vary Accept-Encoding,User-Agent
Content-Encoding gzip
Content-Length 6389
Xonnection close

Hier seht Ihr nochmal wie das dann im Header, welchen Ihr mit Firebug oder ähnlichem sehen könnt, anschließend aussieht. Content-Encoding ist gzip, das Kompressionslevel kann man hier nicht sehen, dieses wird im Header nicht angegeben. Ihr könnt allerdings mal mit dem CompressionLevel Paramter rumspielen und euch dann die Content-Length anschauen.

Hier noch der Link zum Apache Manual

Init Scripte für Centos / Redhat fit machen (Chkconfig)

Init Scripte für Chkconfig

Hier bekommst Du eine kurze beschreibung wie man init Scripte für chkconfig fit macht.

Die Syntax

Für chkconfig sind folgende zwei Einträge im Init Script nötig:

  • chkconfig:
  • description:

Die description ist zwingend notwendig. Ein bischen Doku kann man schon machen.

Bei chkconfig: ist zu beachten, das man den “:“ nicht vergisst, ansonsten erkennt chkconfig den Eintrag nicht. chkconfig: hat drei Paramater, das Runlevel, die Startpriorität und die Stoppriorität. Der Runlevel besagt in welchem Runlevel der Dienst gestartet wird, also 1,2,3,4 oder 5. Die Angabe wird einfach durch die Angabe der Runlevel geamacht. Also:

chkconfig: 12345  <- Script wird in Runlevel 1,2,3,4 und 5 gestartet
chkconfig: 345 <- Übliche Variante, Script wird in Runlevel 2,4,5 gestartet

Die Startpriorität legt fest wann ein Script in den Runleveln gestartet wird. Also:

Script 1:
chkconfig: 345 20 <- Script wird in Runlevel 3,4,5 gestartet mit der Prio 20

Script 2:
chkconfig: 345 21 <- Script wird in Runlevel 3,4,5 gestartet mit der Prio 21 also später als Script 1

Die Stopprorität legt fest wann ein Script in den Runleveln gestopt wird. Also:

Script 1:
chkconfig: 345 20 80 <- Script wird in Runlevel 3,4,5 gestartet mit der Prio 20, gestopped mit der Prio 80

Script 2:
chkconfig: 345 21 79 <- Script wird in Runlevel 3,4,5 gestartet mit der Prio 21 also später als Script 1, gestopped wird es mit Prio 79 also früher als Script 1

Alles ganz einfach.

Eine Description sieht dann folgendermaßen aus:

description: Was mein Script macht

Auch nicht der Hammer. Hier sei nochmals gesagt, man braucht die description gelle Martin?

Beispiel

Hier nochmal ein komplettes Beispiel:

#! /bin/sh
#
# Mein Script
#
# chkconfig: 345 21 79
# description: Mein Script