Benutzer-Werkzeuge

Webseiten-Werkzeuge


tachtler:apache_http_server_centos_6_-_mod_deflate_-_komprimierte_kommunikation

Apache HTTP Server CentOS 6 - mod_deflate - Komprimierte Kommunikation

Das Apache HTTPD Server-Modul mod_deflate implementiert den „DEFLATE“ Ausgabefilter, welcher es erlaubt, die Auslieferung von Inhalten zu komprimieren, bevor diese dann zum anfordernden Client/Browser über das Netzwerk/Internet gesendet wird.

Siehe auch nachfolgenden externen Link:

Vorbereitungen

Das Apache HTTPD Server-Modul mod_deflate ist Bestandteil der Standardinstallation eines Apache HTTPD Server unter CentOS.

:!: HINWEIS - Beim Einsatz des

sollten auch die Module

geladen werden, wie nachfolgend gezeigt:

Konfigurationsdatei: /etc/httpd/conf/httpd.conf - (nur relevanter Ausschnitt):

...
LoadModule deflate_module modules/mod_deflate.so
LoadModule headers_module modules/mod_headers.so
LoadModule headers_module modules/mod_setenvif.so
...

Konfiguration

Nachfolgendes Beispiel, soll die Einbindung demonstrieren: (nur relevanter Ausschnitt)

...
        <IfModule mod_deflate.c>
                AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css text/javascript
                AddOutputFilterByType DEFLATE application/javascript application/x-javascript
                <Location />
                        <IfModule mod_setenvif.c>
                                SetOutputFilter DEFLATE
                                BrowserMatch ^Mozilla/4 gzip-only-text/html
                                BrowserMatch ^Mozilla/4\.0[678] no-gzip
                                BrowserMatch \bMSIE !no-gzip !gzip-only-text/html
                                SetEnvIfNoCase Request_URI \.(?:gif|jpe?g|png)$ no-gzip dont-vary
                        </IfModule>
                        <IfModule mod_headers.c>
                                Header append Vary User-Agent env=!dont-vary
                        </IfModule>
                </Location>
        </IfModule>
...

Erklärungen:

Angabe für welche Typen von Inhalten, der Filter - DEFLATE zum Einsatz kommen soll.

AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css text/javascript
AddOutputFilterByType DEFLATE application/javascript application/x-javascript

Aktivieren des Filters - DEFLATE - im Container dem diese Anweisung enthalten ist. Hier ist das die Anweisung <Location />, welchen den umschließenden Container darstellt.

SetOutputFilter DEFLATE

Ausschluss von bestimmten Browsern, welche Probleme mit der Komprimierung von Inhalten haben. Je nach Browser, welcher über BrowserMatch indentifiziert wird, kann hier die Einschränkung individuell gesetzt werden.

BrowserMatch ^Mozilla/4 gzip-only-text/html
BrowserMatch ^Mozilla/4\.0[678] no-gzip
BrowserMatch \bMSIE !no-gzip !gzip-only-text/html

Schließt die in der URI angeforderten Datei-Typen von der Komprimierung aus. Dies macht bei Datei-Typen sinn, welche bereits selbst ein komprimiertes Format aufweisen.

SetEnvIfNoCase Request_URI \.(?:gif|jpe?g|png)$ no-gzip dont-vary

Das Apache HTTPD Server-Modul mod_deflate sendet eine Zeichenkette

  • Vary: Accept-Encoding HTTP Response-Header

an z.B. zwischengeschaltete Proxy-Server.

Dies bewirkt, dass eine zwischengespeicherte Antwort nur an Clients/Browser, die die entsprechende

  • Accept-Encoding-Request-Header

senden, komprimiert ausgeliefert wird.

Dadurch wird verhindert, dass komprimierte Inhalte an einen Clients/Browser gesendet werden, welche mit komprimierten Inhalten nicht umgehen können.

Nachfolgendes Beispiel, bezieht sich auf die Angabe im Header bezogen auf den USer-Agent-String und der Angabe, welche bereits in den BrowserMatch Definitionen gesetzt wurden.

Header append Vary User-Agent env=!dont-vary

Anpassung LOG-Auswertung

Das Apache HTTPD Server-Modul mod_deflate besitzt die Möglichkeit die ausgelieferten Bytes und den Komprimierungsgrad der ausgelieferten Seiten zu protokollieren.

Nachfolgendes Beispiel zeigt wie die bestehende LOG-Direktive des Apache HTTPD Server erweitert werden kann.

Standard: (nur relevanter Ausschnitt)

...
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
...

Erweitert: (nur relevanter Ausschnitt)

...
DeflateFilterNote ratio
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %b (%{ratio}n)" combined_deflate
...

Entsprechend muss nun auch die Angabe, wie geloggt werden soll entsprechend im Host/VHost angepasst werden.

Standard: (nur relevanter Ausschnitt)

...
CustomLog logs/access_log combined
...

Erweitert: (nur relevanter Ausschnitt)

CustomLog logs/access_log combined_deflate

Nachfolgend ein kurzer Verglich, ohne die veränderte Log-Ausgabe

88.217.171.167 - - [28/Mar/2013:16:10:55 +0100] "GET /doku.php HTTP/1.1" 200 69794 "-" 
"Mozilla/5.0 (X11; Linux i686; rv:17.0) Gecko/20130308 Firefox/17.0"
und mit
88.217.171.167 - - [28/Mar/2013:16:10:55 +0100] "GET /doku.php HTTP/1.1" 200 9706 "-" 
"Mozilla/5.0 (X11; Linux i686; rv:17.0) Gecko/20130308 Firefox/17.0" 9706 (15)

Siehe auch nachfolgenden externen Link:

Test

Um zu sehen, ob die Seiten auch entsprechend komprimiert, für Clients/Browser die mit Komprimierung umgehen können, ausgeliefert werden, kann nachfolgendes Programm genutzt werden:

  • curl

Nachfolgender Aufruf der Webseite http://www.dokuwiki.tachtler.net/doku.php OHNE Komprimierung:

# curl -v -o /dev/null http://www.dokuwiki.tachtler.net/doku.php

Ergebnis:

* About to connect() to www.dokuwiki.tachtler.net port 80 (#0)
*   Trying 88.217.171.167... connected
* Connected to www.dokuwiki.tachtler.net (88.217.171.167) port 80 (#0)
> GET /doku.php HTTP/1.1
> User-Agent: curl/7.19.7 (i386-redhat-linux-gnu) libcurl/7.19.7 NSS/3.13.6.0 zlib/1.2.3 
libidn/1.18 libssh2/1.4.2
> Host: www.dokuwiki.tachtler.net
> Accept: */*
> 
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0< HTTP/1.1 200 OK
< Date: Thu, 28 Mar 2013 15:18:14 GMT
< Server: Apache
< X-Powered-By: PHP/5.3.3
< Set-Cookie: DokuWiki=s55csog34qnbk37tsn33b6and1; path=/; HttpOnly
< Expires: Thu, 19 Nov 1981 08:52:00 GMT
< Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
< Pragma: no-cache
< Set-Cookie: DW68700bfd16c2027de7de74a5a8202a6f=deleted; expires=Wed, 28-Mar-2012 15:18:13 GMT; 
path=/; httponly
< Vary: Accept-Encoding,User-Agent
< Transfer-Encoding: chunked
< Content-Type: text/html; charset=utf-8
< 
{ [data not shown]
100 64546    0 64546    0     0  88722      0 --:--:-- --:--:-- --:--:-- 98243* Connection #0 to 
host www.dokuwiki.tachtler.net left intact

* Closing connection #0

Nachfolgender Aufruf der Webseite http://www.dokuwiki.tachtler.net/doku.php MIT Komprimierung:

# curl -v -o /dev/null --compressed http://www.dokuwiki.tachtler.net/doku.php

Ergebnis:

* About to connect() to www.dokuwiki.tachtler.net port 80 (#0)
*   Trying 88.217.171.167... connected
* Connected to www.dokuwiki.tachtler.net (88.217.171.167) port 80 (#0)
> GET /doku.php HTTP/1.1
> User-Agent: curl/7.19.7 (i386-redhat-linux-gnu) libcurl/7.19.7 NSS/3.13.6.0 zlib/1.2.3 
libidn/1.18 libssh2/1.4.2
> Host: www.dokuwiki.tachtler.net
> Accept: */*
> Accept-Encoding: deflate, gzip
> 
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0< HTTP/1.1 200 OK
< Date: Thu, 28 Mar 2013 15:20:37 GMT
< Server: Apache
< X-Powered-By: PHP/5.3.3
< Set-Cookie: DokuWiki=f9degc9hajf4bub0071jeppmp5; path=/; HttpOnly
< Expires: Thu, 19 Nov 1981 08:52:00 GMT
< Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
< Pragma: no-cache
< Set-Cookie: DW68700bfd16c2027de7de74a5a8202a6f=deleted; expires=Wed, 28-Mar-2012 15:20:36 GMT; 
path=/; httponly
< Vary: Accept-Encoding,User-Agent
< Content-Encoding: gzip
< Transfer-Encoding: chunked
< Content-Type: text/html; charset=utf-8
< 
{ [data not shown]
100  9708    0  9708    0     0  33630      0 --:--:-- --:--:-- --:--:-- 44532* Connection #0 to 
host www.dokuwiki.tachtler.net left intact

* Closing connection #0

:!: HINWEIS - Die Komprimierung spart in oben gezeigtem Beispiel 75 % an Transfervolumen !!!

Cookies helfen bei der Bereitstellung von Inhalten. Durch die Nutzung dieser Seiten erklären Sie sich damit einverstanden, dass Cookies auf Ihrem Rechner gespeichert werden. Weitere Information
tachtler/apache_http_server_centos_6_-_mod_deflate_-_komprimierte_kommunikation.txt · Zuletzt geändert: 2014/11/25 16:13 von klaus