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 ​     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
 +</​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 ​     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
 +</​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