Benutzer-Werkzeuge

Webseiten-Werkzeuge


tachtler:apache_http_server_centos_7_-_mod_deflate_-_komprimierte_kommunikation

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

tachtler:apache_http_server_centos_7_-_mod_deflate_-_komprimierte_kommunikation [2016/12/05 14:26] (aktuell)
klaus angelegt
Zeile 1: Zeile 1:
 +====== Apache HTTP Server CentOS 7 - mod_deflate - Komprimierte Kommunikation ======
 +
 +Das [[http://httpd.apache.org|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**: 
 +  * **[[http://httpd.apache.org/docs/2.4/mod/mod_deflate.html|Apache.org - Apache Module mod_deflate]]**
 +
 +===== Vorbereitungen =====
 +
 +Das [[http://httpd.apache.org|Apache HTTPD Server]]-Modul **''mod_deflate''** ist Bestandteil der **Standardinstallation** eines [[http://httpd.apache.org|Apache HTTPD Server]] unter [[http://www.centos.org|CentOS]].
 +
 +:!: **HINWEIS** - Beim Einsatz des 
 +  * [[http://httpd.apache.org|Apache HTTPD Server]]-Modul **''mod_deflate''**
 +sollten auch die Module
 +  * [[http://httpd.apache.org|Apache HTTPD Server]]-Modul **''mod_headers''**
 +  * [[http://httpd.apache.org|Apache HTTPD Server]]-Modul **''mod_setenvif''**
 +**geladen** werden, wie nachfolgend gezeigt:
 +
 +Konfigurationsdatei: **''/etc/httpd/conf.modules.d/00-base.conf''** - (**nur relevanter Ausschnitt**):
 +<code>
 +...
 +LoadModule deflate_module modules/mod_deflate.so
 +LoadModule headers_module modules/mod_headers.so
 +LoadModule headers_module modules/mod_setenvif.so
 +...
 +</code>
 +
 +===== Konfiguration =====
 +
 +Nachfolgendes **Beispiel**, soll die Einbindung demonstrieren: (**nur relevanter Ausschnitt**)
 +<code apache>
 +...
 +        <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>
 +...
 +</code>
 +
 +**__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.
 +<code apache>
 +                SetOutputFilter DEFLATE
 +</code>
 +
 +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.
 +<code apache>
 +                BrowserMatch ^Mozilla/4 gzip-only-text/html
 +                BrowserMatch ^Mozilla/4\.0[678] no-gzip
 +                BrowserMatch \bMSIE !no-gzip !gzip-only-text/html
 +</code>
 +
 +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.
 +<code apache>
 +                <IfModule setenvif_module>
 +                        SetEnvIfNoCase Request_URI \.(?:png|jpe?g|gif|tar|gz|zip)$ no-gzip
 +                </IfModule>
 +</code>
 +
 +Das [[http://httpd.apache.org|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.
 +<code apache>
 +                <IfModule headers_module>
 +                        # Properly handle requests coming from behind proxies
 +                        Header append Vary User-Agent
 +                </IfModule>
 +</code>
 +
 +==== Anpassung LOG-Auswertung ====
 +
 +Das [[http://httpd.apache.org|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 [[http://httpd.apache.org|Apache HTTPD Server]] erweitert werden kann.
 +
 +**__Standard__**: (**nur relevanter Ausschnitt**)
 +<code apache>
 +...
 +      LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
 +...
 +</code>
 +
 +**__Erweitert__**: (**nur relevanter Ausschnitt**)
 +<code apache>
 +...
 +      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
 +...
 +</code>
 +
 +Entsprechend muss nun auch die Angabe, wie geloggt werden soll entsprechend im Host/VHost angepasst werden.
 +
 +**__Standard__**: (**nur relevanter Ausschnitt**)
 +<code apache>
 +...
 +       CustomLog logs/access_log combined
 +...
 +</code>
 +
 +**__Erweitert__**: (**nur relevanter Ausschnitt**)
 +<code apache>
 +       CustomLog logs/access_log combined_deflate
 +</code>
 +
 +Nachfolgend ein kurzer Verglich, **ohne** die veränderte Log-Ausgabe
 +<code>
 +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
 +</code>
 +und **mit**
 +<code>
 +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%)
 +</code>
 +
 +Siehe auch nachfolgenden **externen Link**: 
 +  * **[[http://httpd.apache.org/docs/2.4/mod/mod_deflate.html#deflatefilternote|Apache.org - Apache Module mod_deflate - DeflateFilterNote Directive ]]**
 +
 +===== 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**:
 +<code>
 +# curl -v -o /dev/null http://www.dokuwiki.tachtler.net/doku.php
 +</code>
 +
 +**__Ergebnis__**:
 +<code>
 +* 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< 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      88722      0 --:--:-- --:--:-- --:--:-- 98243* Connection #0 to 
 +host www.dokuwiki.tachtler.net left intact
 +
 +* Closing connection #0
 +</code>
 +
 +Nachfolgender Aufruf der Webseite [[http://www.dokuwiki.tachtler.net/doku.php]] **MIT Komprimierung**:
 +<code>
 +# curl -v -o /dev/null --compressed http://www.dokuwiki.tachtler.net/doku.php
 +</code>
 +
 +**__Ergebnis__**:
 +<code>
 +* 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< 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      33630      0 --:--:-- --:--:-- --:--:-- 44532* Connection #0 to 
 +host www.dokuwiki.tachtler.net left intact
 +
 +* Closing connection #0
 +</code>
 +
 +:!: **HINWEIS** - **Die Komprimierung spart in oben gezeigtem Beispiel __75 %__ an Transfervolumen !!!**
  
tachtler/apache_http_server_centos_7_-_mod_deflate_-_komprimierte_kommunikation.txt · Zuletzt geändert: 2016/12/05 14:26 von klaus