Benutzer-Werkzeuge

Webseiten-Werkzeuge


tachtler:apache_http_server_archlinux_-_mod_deflate_-_komprimierte_kommunikation

Apache HTTP ArchLinux - 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.

* Quellen: Buch: Sascha Kersken - Apache 2.4 Das umfassende Handbuch

:!: WICHTIG - Nachfolgende Konfigurationen setzen die Einrichtung eines Apache HTTP Servers, wie unter nachfolgendem internen Link beschrieben, voraus:

:!: HINWEIS - Eine explizite Installation des Moduls mod_deflate ist nicht erforderlich, da das Modul im Pakete apache bereits enthalten ist!

Ab hier werden zur Ausführung nachfolgender Befehle root-Rechte benötigt. Um der Benutzer root zu werden, melden Sie sich bitte als root-Benutzer am System an, oder wechseln mit nachfolgendem Befehl zum Benutzer root:

$ su -
Password:

Vorbereitungen

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

:!: HINWEIS - Beim Einsatz des

sollten auch die Module

geladen werden, was jedoch aktuell standardmäßig der Fall ist:

deflate-Konfiguration

deflate-Konfiguration: /etc/httpd/conf/httpd.conf - Konfiguration

Bevor ein erneuter Neustart des Apache HTTP Server erfolgreich durchgeführt werden kann, ist es erforderlich für die nachfolgende Installation die Konfigurationsdatei /etc/httpd/conf/httpd.conf zu verändern.

Nachfolgende die Veränderung, welche vorgenommen werden muss:

(Nur relevanter Ausschnitt):

# Tachtler
# default: #LoadModule deflate_module modules/mod_deflate.so
LoadModule deflate_module modules/mod_deflate.so

Erklärungen:

  • LoadModule deflate_module modules/mod_deflate.so

Die Einbindung des Moduls mod_deflate ist erforderlich, um eine Komprimierung des BODY's vor der Übermittlung an den Client/Browser durchführen zu können.

Anschliessend sind nachfolgende Ergänzungen, hier an der Konfigurationsdatei

  • /etc/httpd/conf/httpd.conf

z.B. am Ende der Konfigurationsdatei durchzuführen:

(Nur relevanter Ausschnitt):

<IfModule deflate_module>
    # Place filter 'DEFLATE' on all outgoing content
    SetOutputFilter DEFLATE
    # Exclude uncompressible browser via part of user-agent string
    BrowserMatch ^Mozilla/4 gzip-only-text/html
    BrowserMatch ^Mozilla/4\.0[678] no-gzip
    BrowserMatch \bMSIE !no-gzip !gzip-only-text/html
    # Exclude uncompressible content via file type
    <IfModule setenvif_module>
        SetEnvIfNoCase Request_URI \.(?:png|jpe?g|gif|tar|gz|zip)$ no-gzip
    </IfModule>
    <IfModule headers_module>
        # Properly handle requests coming from behind proxies
        Header append Vary User-Agent
    </IfModule>
</IfModule>

Erklärungen:

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.

    <IfModule setenvif_module>
        SetEnvIfNoCase Request_URI \.(?:png|jpe?g|gif|tar|gz|zip)$ no-gzip
    </IfModule>

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.

    <IfModule headers_module>
        # Properly handle requests coming from behind proxies
        Header append Vary User-Agent
    </IfModule>

deflate-Konfiguration: /etc/httpd/conf/httpd.conf - 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)

<IfModule log_config_module>
    #
    # The following directives define some format nicknames for use with
    # a CustomLog directive (see below).
    #
    LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
    LogFormat "%h %l %u %t \"%r\" %>s %b" common
 
    <IfModule logio_module>
      # You need to enable mod_logio.c to use %I and %O
      LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %I %O" combinedio
    </IfModule>
 
    #
    # The location and format of the access logfile (Common Logfile Format).
    # If you do not define any access logfiles within a <VirtualHost>
    # container, they will be logged here.  Contrariwise, if you *do*
    # define per-<VirtualHost> access logfiles, transactions will be
    # logged therein and *not* in this file.
    #
    # Tachtler
    # default: CustomLog "/var/log/httpd/access_log" common
    #CustomLog "/var/log/httpd/access_log" common
 
    #
    # If you prefer a logfile with access, agent, and referer information
    # (Combined Logfile Format) you can use the following directive.
    #
    # Tachtler
    # default: #CustomLog "/var/log/httpd/access_log" combined
    CustomLog "/var/log/httpd/access_log" combined_deflate
 
   # Tachtler - NEW -
    <IfModule deflate_module>
        # You need to enable mod_deflate.c to use instream, outstream and ratio.
        DeflateFilterNote Input instream
        DeflateFilterNote Output outstream
        DeflateFilterNote Ratio ratio
        LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %b %{outstream}n/%{instream}n (%{ratio}n%%)" combined_deflate
    </IfModule> 
</IfModule>

Erklärungen:

  • #CustomLog "/var/log/httpd/access_log" common

Deaktivieren des „Loggings“ des /var/log/httpd/access_log mittels der Ausgestaltung common.

  • CustomLog "/var/log/httpd/access_log" combined_deflate

Aktivierung des „Loggings“ des /var/log/httpd/access_log mittels der Ausgestaltung combined_deflate.

  •       DeflateFilterNote Input instream
          DeflateFilterNote Output outstream
          DeflateFilterNote Ratio ratio
          LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %b %{outstream}n/%{instream}n (%{ratio}n%%)" combined_deflate

Definitionen, wie die Ausgestaltung für das „Logging“ mittels combined_deflate aussehen soll.

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

88.217.171.167 - - [05/Dec/2016:13:31:47 +0100] "GET /js/base.js HTTP/1.1" 200 116 "https://www.tachtler.net/" 
"Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Firefox/45.0" TLSv1.2 ECDHE-RSA-AES128-SHA

und mit

88.217.171.167 - - [05/Dec/2016:13:31:47 +0100] "GET /js/base.js HTTP/1.1" 200 116 "https://www.tachtler.net/" 
"Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Firefox/45.0" TLSv1.2 ECDHE-RSA-AES128-SHA 116 98/120 (81%)

Siehe auch nachfolgenden externen Link:

Neustart

Nach den vorangegangenen Konfigurationsschritten, sollte einem Neustart nichts im Wege stehen:

# systemctl restart httpd.service

:!: HINWEIS - Es erfolgen keine weiteren Ausgaben, wenn der Start erfolgreich war !

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 !!!

Diese Website verwendet Cookies. Durch die Nutzung der Website stimmen Sie dem Speichern von Cookies auf Ihrem Computer zu. Außerdem bestätigen Sie, dass Sie unsere Datenschutzbestimmungen gelesen und verstanden haben. Wenn Sie nicht einverstanden sind, verlassen Sie die Website.Weitere Information
tachtler/apache_http_server_archlinux_-_mod_deflate_-_komprimierte_kommunikation.txt · Zuletzt geändert: 2022/07/01 08:36 von klaus