# Tomcat und Kompression



## jann (9. Dez 2008)

Hallo,

ich habe gerade ein Problem mit einem Tomcat und der Kompression von auszuliefernden Seiten.

In meiner lokalen Testumgebung habe ich in der server.xml dem HTTP-Connector folgende Attribute hinzugefügt:

compression="on" compressionMinSize="2048" noCompressionUserAgents="gozilla, traviata" compressableMimeType="text/html"

Das sind die Standardwerte, welche auch in der server.xml als Beispiel stehen. In der Testumgebung funktioniert die Kompression einwandfrei und es werden Kompressionsraten mit dem Faktor 10 bis 60(!) erreicht.

Nun habe ich der server.xml zum Tomcat auf dem Produktivserver im Netz die gleichen Attribute dem HTTP-Connector hinzugefügt - aber die Seiten werden alle *unkomprimiert* ausgeliefert.

In beiden Fällen kommt ein Tomcat in der Version 6.0.16 zum Einsatz.

Der Unterschied ist, dass auf dem Produktivserver noch ein Apache-Webserver die Anfragen an den Tomcat weiterleitet, was ja eine übliche Vorgehensweise ist.

Hat hier jemand schon mal damit Erfahrung gemacht? Könnte es sein, dass der Apache die komprimierten Dateien wieder entpackt und erst dann ausliefert? Ist vielleicht noch etwas zu beachten?

Grüße

Jann


----------



## maki (9. Dez 2008)

Die Daten werden eben nicht über den HttpConnector ausgeliefert, sondern über den AJP Connector, k.A. ob der Kompression unterstützt.

Jedenflls kann der Apache auhc komprimieren


----------



## jann (9. Dez 2008)

Hallo maki,

danke. Aber die Kompression funktioniert lokal bei exakt den gleichen Inhalten der server.xml. Mögliche Attribute zum HTTP-Connector findet man hier:

http://tomcat.apache.org/tomcat-6.0-doc/config/http.html

Zum AJP Connector gibt es keine Attribute zur Kompression, diese Angaben gehören in den HTTP-Connector.

jann


----------



## maki (9. Dez 2008)

Dann musst  wohl den APache auf der Prod Maschine konfigurieren


----------



## gex (9. Dez 2008)

Entweder du verwendest mod_deflate auf dem Apache: http://techpitcher.com/compression-using-mod_deflate-in-apache.html

Oder wenn du trotz verschiedenster Umgebungen von der Kompression bei deiner Anwendung profitieren möchtest,
dann kannst du anstelle der Server-Bordmittel auch einen Compression-Filter in deine Applikation einbauen.

Gruss


----------



## jann (11. Dez 2008)

Vielen Dank für die Antworten,

gut, dass man den Apache so onfigurieren kann, dass er komprimiert ausliefert ist ja schön und gut aber in meinem Fall müsste er doch schon komprimierte Seiten vom Tomcat bekommen und diese nur ausliefern, oder?

Wenn ich den Apache so konfigurieren könnte, dass er komprimiert, dann brauch das der Tomcat ja nicht mehr. Leider habe ich auf den Apache bei meinem Provider keinen Einfluss, da er für mehrere Tomcats (auch von anderen Usern) zuständig ist.

Grüße

Jann


----------



## maki (11. Dez 2008)

gex' Tipp mit dem Compression-Filter hast du aber gelesen, gell?


----------



## jann (12. Dez 2008)

So, nachdem ich gestern noch mal intensiv gegoogelt habe (auf englischen seiten) glaube ich folgende erklärung zu haben (wurde hier auch schon fast so beantwortet):

Der Tomcat läuft unter einem Apache der Anfragen an mehrere Tomcats vergibt -> der Tomcat kommuniziert mit dem Apache also über den AJP-Connector (sh. maki) -> der AJP Connector kennt keine Kompression (apache.org).

Auf den Apache habe keinen Einfluss - also muss ich selber für eine Lösung sorgen -> also eigener Compression-Filter für meine Anwendung (sh. gex).

Danke an alle

jann


----------



## maki (12. Dez 2008)

Falls du das übersehen haben solltest, nochmal:


> gex' Tipp mit dem Compression-Filter hast du aber gelesen, gell?



Warum man "intensiv googeln" muss um die Tomcat Doku zu finden verstehe ich nicht ganz


----------



## jann (12. Dez 2008)

na, ich hab eben bspw. hier geschaut:

http://tomcat.apache.org/tomcat-6.0-doc/connectors.html

Natürlich habe ich auch diese Doku gelesen:

http://tomcat.apache.org/tomcat-6.0-doc/config/http.html
http://tomcat.apache.org/tomcat-6.0-doc/config/ajp.html

Aber es schien mir nicht zwingend, dass der AJP-Connector genutzt werden muss um mit dem Apache-Webserver zum kommunizieren.

Vielleicht liess ich mich auch zeitweise von meinem Provider blenden, der ein ausgewiesener Tomcat Auskenner sein soll. Der hat nämlich vor einiger Zeit für mich die Änderungen am HTTP-Connector gemacht, da ich auf die server.xml keinen Zugriff habe. Der Support hatte dann, nachdem die Kompression nicht lief, selber noch etwas rumprobiert und keine Lösung gefunden.

Wie dem auch sei, ich habe jetzt jedenfalls den Beispiel-Kompressionsfilter aus der Tomcat-Installation genommen, etwas modifiziert und in meine Anwendung eingebaut. Läuft prima!

Muss sich jetzt aber noch im Produktiveinsatz bewähren.

Gute Nacht

Jann


----------

