Ergebnis 1 bis 18 von 18

Thema: Contao 4: mod_deflate greift nicht

  1. #1
    Contao-Nutzer Avatar von ttcdummy
    Registriert seit
    02.03.2014.
    Beiträge
    213
    User beschenken
    Wunschliste

    Standard Contao 4: mod_deflate greift nicht

    Hallo zusammen,

    ich versuche nun seit einiger Zeit eine Seite über mod_deflate auszuliefern.

    Ich habe zum groben Testen der Einstellungen unter /web/test.html eine einfache HTML-Seite angelegt, welche ich mit diesem Tool hier getestet habe:
    http://www.gidnetwork.com/tools/gzip-test.php

    Ergebnis:
    Code:
    Web page compressed? Yes
    Compression type? gzip
    Size, Markup (bytes) 139
    Size, Compressed (bytes) 126
    Compression % 9.4
    Funktioniert also und mod_deflate ist auf dem Server aktiv.
    In der .htaccess-Datei (/web/.htaccess) steht folgendes:

    Code:
    ##
    # Set the proper MIME types
    # @see https://github.com/h5bp/html5-boilerplate
    ##
    <IfModule mod_mime.c>
      AddType application/javascript              js jsonp
      AddType application/json                    json
      AddType audio/ogg                           oga ogg
      AddType audio/mp4                           m4a f4a f4b
      AddType video/ogg                           ogv
      AddType video/mp4                           mp4 m4v f4v f4p
      AddType video/webm                          webm
      AddType video/x-flv                         flv
      AddType image/svg+xml                       svg svgz
      AddEncoding gzip                            svgz
      AddType application/vnd.ms-fontobject       eot
      AddType application/x-font-ttf              ttf ttc
      AddType font/opentype                       otf
      AddType application/x-font-woff             woff woff2
      AddType image/x-icon                        ico
      AddType image/webp                          webp
      AddType text/cache-manifest                 appcache manifest
      AddType text/x-component                    htc
      AddType application/xml                     rss atom xml rdf
      AddType application/x-web-app-manifest+json webapp
      AddType text/x-vcard                        vcf
      AddType application/x-shockwave-flash       swf
    </IfModule>
    
    ##
    # Gzip compression
    # @see https://github.com/h5bp/html5-boilerplate
    ##
    <IfModule mod_deflate.c>
      <IfModule mod_filter.c>
        AddOutputFilterByType DEFLATE text/html text/plain text/css application/json
        AddOutputFilterByType DEFLATE application/javascript
        AddOutputFilterByType DEFLATE text/xml application/xml text/x-component
        AddOutputFilterByType DEFLATE application/xhtml+xml application/rss+xml application/atom+xml
        AddOutputFilterByType DEFLATE image/x-icon image/svg+xml application/vnd.ms-fontobject application/x-font-ttf font/opentype
      </IfModule>
    </IfModule>
    
    # Browser-Caching
    <IfModule mod_expires.c>
      ExpiresActive on
      ExpiresByType text/cache-manifest           "access plus 0 seconds"
      ExpiresByType text/html                     "access plus 0 seconds"
      ExpiresByType text/xml                      "access plus 0 seconds"
      ExpiresByType application/xml               "access plus 0 seconds"
      ExpiresByType application/json              "access plus 0 seconds"
      ExpiresByType application/rss+xml           "access plus 1 hour"
      ExpiresByType application/atom+xml          "access plus 1 hour"
      ExpiresByType image/gif                     "access plus 1 month"
      ExpiresByType image/png                     "access plus 1 month"
      ExpiresByType image/jpeg                    "access plus 1 month"
      ExpiresByType image/x-icon                  "access plus 1 month"
      ExpiresByType video/ogg                     "access plus 1 month"
      ExpiresByType audio/ogg                     "access plus 1 month"
      ExpiresByType video/mp4                     "access plus 1 month"
      ExpiresByType video/webm                    "access plus 1 month"
      ExpiresByType text/x-component              "access plus 1 month"
      ExpiresByType application/x-font-ttf        "access plus 1 month"
      ExpiresByType font/opentype                 "access plus 1 month"
      ExpiresByType application/x-font-woff       "access plus 1 month"
      ExpiresByType font/x-woff                   "access plus 1 month"
      ExpiresByType image/svg+xml                 "access plus 1 month"
      ExpiresByType application/vnd.ms-fontobject "access plus 1 month"
      ExpiresByType text/css                      "access plus 1 year"
      ExpiresByType application/javascript        "access plus 1 year"
      ExpiresByType application/x-javascript      "access plus 1 year"
    </IfModule>
    
    # Komprimierte SVG-Dateien
    AddType image/svg+xml svg svgz
    AddEncoding gzip svgz
    
    # Use the front controller as index file. It serves as a fallback solution when
    # every other rewrite/redirect fails (e.g. in an aliased environment without
    # mod_rewrite). Additionally, this reduces the matching process for the
    # start page (path "/") because otherwise Apache will apply the rewriting rules
    # to each configured DirectoryIndex file (e.g. index.php, index.html, index.pl).
    DirectoryIndex app.php
    
    # Disabling MultiViews prevents unwanted negotiation, e.g. "/app" should not resolve
    # to the front controller "/app.php" but be rewritten to "/app.php/app".
    <IfModule mod_negotiation.c>
        Options -MultiViews
    </IfModule>
    
    <IfModule mod_rewrite.c>
        RewriteEngine On
    
        Redirect 301 /de https://www.meinedomain.de/en
    
        # Determine the RewriteBase automatically and set it as environment variable.
        # If you are using Apache aliases to do mass virtual hosting or installed the
        # project in a subdirectory, the base path will be prepended to allow proper
        # resolution of the app.php file and to redirect to the correct URI. It will
        # work in environments without path prefix as well, providing a safe, one-size
        # fits all solution. But as you do not need it in this case, you can comment
        # the following 2 lines to eliminate the overhead.
        RewriteCond %{REQUEST_URI}::$1 ^(/.+)/(.*)::\2$
        RewriteRule ^(.*) - [E=BASE:%1]
    
        # Sets the HTTP_AUTHORIZATION header removed by apache
        RewriteCond %{HTTP:Authorization} .
        RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
    
        # Redirect to URI without front controller to prevent duplicate content
        # (with and without `/app.php`). Only do this redirect on the initial
        # rewrite by Apache and not on subsequent cycles. Otherwise we would get an
        # endless redirect loop (request -> rewrite to front controller ->
        # redirect -> request -> ...).
        # So in case you get a "too many redirects" error or you always get redirected
        # to the start page because your Apache does not expose the REDIRECT_STATUS
        # environment variable, you have 2 choices:
        # - disable this feature by commenting the following 2 lines or
        # - use Apache >= 2.3.9 and replace all L flags by END flags and remove the
        #   following RewriteCond (best solution)
        RewriteCond %{ENV:REDIRECT_STATUS} ^$
        RewriteRule ^app\.php(/(.*)|$) %{ENV:BASE}/$2 [R=301,L]
    
        # If the requested filename exists, simply serve it.
        # We only want to let Apache serve files and not directories.
        RewriteCond %{REQUEST_FILENAME} -f
        RewriteRule .? - [L]
    
        # Rewrite all other queries to the front controller.
        RewriteRule .? %{ENV:BASE}/app.php [L]
    </IfModule>
    
    <IfModule !mod_rewrite.c>
        <IfModule mod_alias.c>
            # When mod_rewrite is not available, we instruct a temporary redirect of
            # the start page to the front controller explicitly so that the website
            # and the generated links can still be used.
            RedirectMatch 302 ^/$ /app.php/
            # RedirectTemp cannot be used instead
        </IfModule>
    </IfModule>
    
    # Allow access from all domains for webfonts (see contao/core-bundle#528)
    <IfModule mod_headers.c>
      <FilesMatch "\.(ttf|ttc|otf|eot|woff2?|font\.css)$">
        Header set Access-Control-Allow-Origin "*"
      </FilesMatch>
    </IfModule>
    Teste ich jetzt die Seite, indem ich ganz normal die Domain abfrage mit dem Tool, wird mir angezeigt, dass keine Komprimierung aktiviert ist. Google Insight sagt dabei das Gleiche.
    Andere CMS-Systeme auf dem gleichen Hosting laufen laut dem Tool mit Komprimierung.

    Was kann hier falsch eingestellt sein?
    Wo sollte ich nachhaken?

  2. #2
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    34.116
    Partner-ID
    10107

    Standard

    Hast du dir die Response Header auf http://www.gidnetwork.com/tools/gzip-test.php angsehen? Ist da eh kein 301 Response drin? Die werden nicht komprimiert.

    Ansonsten verwende ich bei unseren Contao 4 Installationen mehr oder weniger die gleichen Einstellungen und da funktioniert die Kompression (auch laut http://www.gidnetwork.com/tools/gzip-test.php).

  3. #3
    Contao-Nutzer Avatar von ttcdummy
    Registriert seit
    02.03.2014.
    Beiträge
    213
    User beschenken
    Wunschliste

    Standard

    Hi, ja bei der direkten Domain bekomme ich den 301er dort angezeigt. Ich habe also einmal eine Deep-URL verwendet mit diesem Header-Ergebnis: HTTP/1.1 200 OK

    Allerdings weiterhin ohne aktive Komprimierung :-(

    Als URL-Suffix habe ich "" (also keinen) und prepend_locale auf true stehen, da ich das /de/ bzw. /en/ in der URL haben möchte. Kann das noch was ausmachen?

    Hosting liegt als ManagedServer bei Hetzner

  4. #4
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    34.116
    Partner-ID
    10107

    Standard

    Ist mod_filter bei deinem Hetzner Server aktiv? Bei den normalen Shared Hosting Paketen von Hetzner nämlich nicht.

  5. #5
    Contao-Nutzer Avatar von ttcdummy
    Registriert seit
    02.03.2014.
    Beiträge
    213
    User beschenken
    Wunschliste

    Standard

    Muss ich herausfinden. Ich habe mich schon gefragt ob es überhaupt notwendig ist die Deklaration hier zu machen, oder ob man das nicht ganz weglassen kann. Nen 500er erhalte ich jedenfalls dann nicht.
    Geändert von ttcdummy (16.01.2018 um 16:23 Uhr)

  6. #6
    Contao-Nutzer Avatar von ttcdummy
    Registriert seit
    02.03.2014.
    Beiträge
    213
    User beschenken
    Wunschliste

    Standard

    Muss ja, sonst würde die Eingangs erwähnte test.html doch auch nicht komprimiert.

  7. #7
    Wandelndes Contao-Lexikon Avatar von tab
    Registriert seit
    22.10.2013.
    Beiträge
    10.078
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Nein, das ist eine statische Datei ...
    Edit: Zufällig hatte ich das Problem in einem Hetzner Shared Hosting (Level 4) und Spooky hat mir geholfen. Das hier hat funktioniert ...

    Oben in der .htaccess hatte ich:
    Code:
    php_flag zlib.output_compression 1
    php_value zlib.output_compression_level 5
    Weiter unten dann:
    Code:
    ##
    # Gzip compression
    # @see https://github.com/h5bp/html5-boilerplate
    ##
    <IfModule mod_deflate.c>
      <filesMatch "\.(js|css|html)$">
        SetOutputFilter DEFLATE
      </filesMatch>  
    #  <IfModule mod_filter.c>
    #    AddOutputFilterByType DEFLATE text/html text/plain text/css application/json
    #    AddOutputFilterByType DEFLATE application/javascript
    #    AddOutputFilterByType DEFLATE text/xml application/xml text/x-component
    #    AddOutputFilterByType DEFLATE application/xhtml+xml application/rss+xml application/atom+xml
    #    AddOutputFilterByType DEFLATE image/x-icon image/svg+xml application/vnd.ms-fontobject application/x-font-ttf font/opentype
    #  </IfModule>
    </IfModule>
    Geändert von tab (16.01.2018 um 16:42 Uhr)

  8. #8
    Contao-Nutzer Avatar von ttcdummy
    Registriert seit
    02.03.2014.
    Beiträge
    213
    User beschenken
    Wunschliste

    Standard

    Blöde Frage: werden damit dann nicht nur CSS, JS und HTML Endungen komprimiert?

  9. #9
    Wandelndes Contao-Lexikon Avatar von tab
    Registriert seit
    22.10.2013.
    Beiträge
    10.078
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Ja, zumindest in meiner Installation gab es sonst nichts auszuliefern an statischen Dateien, die komprimiert werden sollten.

  10. #10
    Contao-Nutzer Avatar von ttcdummy
    Registriert seit
    02.03.2014.
    Beiträge
    213
    User beschenken
    Wunschliste

    Standard

    Was aber mit den dynamisch generierten Seiten, die keine HTML Endung z.B. haben? Sollten die nicht auch komprimiert werden vor der Übertragung?

  11. #11
    Wandelndes Contao-Lexikon Avatar von tab
    Registriert seit
    22.10.2013.
    Beiträge
    10.078
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Dynamische Inhalte werden nach meinem Verständnis durch die Änderung im Abschnitt unten grundsätzlich erst mal gar nicht mehr komprimiert. Deswegen die zwei Zeilen oben, die die Komprimierung mit zlib aktivieren. Bei manchen Hostern kann/muss man diese Werte auch in der php.ini setzen, bei Hetzner geht es nur in der .htaccess. Aber, wie geschrieben, diese Hetzner-Erfahrungen basieren NICHT auf einem Managed Server, sondern auf einem Shared Hosting. Allerdings liegt halt der Verdacht erst mal nahe, dass da vielleicht manches ähnlich konfiguriert sein könnte. Eventuell wirst du da aber andere Voreinstellungen und mehr Einstellmöglichkeiten haben.

  12. #12
    Contao-Nutzer
    Registriert seit
    16.08.2012.
    Beiträge
    41

    Standard

    Hi Leute,

    bei mir ist es ein dedi bei Hetzner. Contao 4.5.3

    Grundsätzlich funktioniert die Kompression für dynamische Inhalte wie beschrieben. Bei Hetzner dauert es nur ein bisschen bis PHP-Einstellungen per htaccess neu eingelesen werden. Siehe Wert in "htscanner.default_ttl" (den man nicht überschreiben kann)

    Testseite: test.php im "web"-Verzeichnis platziert.

    PHP-Code:
    <?php
    header
    ('content-type:text/html; charset=utf-8');

    ob_start();

    echo 
    '<pre>
    zlib.output_compression: ' 
    ini_get('zlib.output_compression') . 
    output_buffering: ' 
    ini_get('output_buffering') . 
    output_handler: ' 
    ini_get('output_handler') .
    '</pre>';

    echo 
    file_get_contents('paar-kilo-text.html');

    ob_get_flush();
    .htaccess

    Code:
    php_flag zlib.output_compression 1
    Oder
    Code:
    output_handler ob_gzhandler
    Wenn ich nun die Testseite aurufen (/test.php > gzip > OK) ist alles i.O. Rufe ich allerdings die "normalen" Contao-Seiten (/contao-seite.html) auf, funktioniert die Komprimierung nicht. Allerdings bei den 404er (/gibtsnicht.html) schon.

    Was könnte die Erklärung dafür sein? Möglicherweise wird die Komprimierung zur Laufzeit deaktiviert? Vielleicht sogar per Einstellung? Im Quelltext habe ich schon bisschen gestöbert, aber keinen direkten Hinweis darauf gefunden.

    @tab: Du schreibst: "Das hier hat funktioniert ... […]php_flag zlib.output_compression 1[…]". Für die normalen Seiten in Contao? Könntest Du das bitte noch mal bestätigen?

    Vielen Dank und schönen Tag noch.
    ciao, Stefan
    Geändert von stefan der zweite (29.01.2018 um 09:07 Uhr)

  13. #13
    Wandelndes Contao-Lexikon Avatar von tab
    Registriert seit
    22.10.2013.
    Beiträge
    10.078
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Zitat Zitat von stefan der zweite Beitrag anzeigen
    @tab: Du schreibst: "Das hier hat funktioniert ... […]php_flag zlib.output_compression 1[…]". Für die normalen Seiten in Contao? Könntest Du das bitte noch mal bestätigen?

    Vielen Dank und schönen Tag noch.
    ciao, Stefan
    Ja, das hat funktioniert und funktioniert auch noch. Allerdings ist das Contao 3.5 und ein Hetzner Level 4 Paket. Ich sehe aber keinen Grund, warum das nicht auch mit Contao 4 funktionieren sollte. Testen kann ich das leider nicht. Erstens ist das ein Kunden-Webspace, zweitens läuft da Contao 4 sowieso nicht.
    Ganz oben in der (Contao 3.5) .htaccess steht drin
    Code:
    php_flag zlib.output_compression 1
    php_value zlib.output_compression_level 5
    Ich könnte mir vorstellen, dass man den zlib.output_compression_level auch setzen sollte, weil beim Defaultwert der Server selbst darüber entscheidet. Entscheidet der sich für Level 0, dann heisst das eben keine Komprimierung.

    Jedenfalls habe ich gerade mal die entsprechende Kundenseite aufgerufen, der Response-Header sieht so aus:
    Code:
    Cache-Control: public, max-age=2573
    Content-Encoding: gzip
    Content-Type: text/html; charset=utf-8
    Date: Mon, 29 Jan 2018 09:36:19 GMT
    Expires: Mon, 29 Jan 2018 10:19:12 GMT
    Last-Modified: Mon, 29 Jan 2018 09:36:19 GMT
    Pragma: public
    Server: Apache
    Vary: User-Agent,Accept-Encoding
    200 OK

  14. #14
    Contao-Nutzer
    Registriert seit
    16.08.2012.
    Beiträge
    41

    Standard

    OK. Danke für die Rückmeldung.

    Für contao 3.5 kann ich wiederum bestätigen, dass die Komprimierung wie von Dir geschildert funktioniert.


    Ich könnte mir vorstellen, dass man den zlib.output_compression_level auch setzen sollte, weil beim Defaultwert der Server selbst darüber entscheidet. Entscheidet der sich für Level 0, dann heisst das eben keine Komprimierung.
    Nee, leider nicht.

    Bei der 4er muss etwas anders sein … vermute ich mal :-)

    Kann den wer das Verhalten "normale Seiten keine Kompression, 404er jedoch schon", nachvollziehen.

    ciao, Stefan

  15. #15
    Contao-Nutzer Avatar von ttcdummy
    Registriert seit
    02.03.2014.
    Beiträge
    213
    User beschenken
    Wunschliste

    Standard

    Eventuell hilft es bzgl. Hetzner:

    Die Managed Server "dedi" (die etwas älter sind) haben für dynamische Seiten nicht automatisch die Komprimierung aktiviert.
    Das lässt sich auch nicht einfach per .htaccess dort aktivieren. Dazu muss auf das Update gewartet werden:
    https://wiki.hetzner.de/index.php/Softwareupdate2018

    Hier steht:
    Erweitere Konfigurationsmöglichkeiten per .htaccess
    Im neuen System lassen sich einige Optionen per .htaccess setzen, welche vorher ausschließlich im VHost gesetzt werden konnten. Dies beinhaltet unter anderem die Steuerung für die Komprimierung (mod_deflate), das Caching (mod_expires) und das Setzen von Headern (mod_headers).
    Wer derzeit einen neuen Server bestellt erhält das Update direkt.

    Grüße

  16. #16
    Wandelndes Contao-Lexikon Avatar von tab
    Registriert seit
    22.10.2013.
    Beiträge
    10.078
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Naja, mod_deflate ist eigentlich m.E. seit geraumer Zeit Standard. Allerdings, wenn ich das richtig verstehe, sollte sich das doch dann bereits jetzt schon im vHost aktivieren lassen?

  17. #17
    Contao-Nutzer
    Registriert seit
    16.08.2012.
    Beiträge
    41

    Standard

    Zitat Zitat von ttcdummy Beitrag anzeigen
    Oh, Danke. Hab ich noch gar nicht mitbekommen.

    Ansonsten trifft das leider nicht auf mein aktuelles "Problem" zu.

    ciao, Stefan

  18. #18
    Contao-Nutzer
    Registriert seit
    16.08.2012.
    Beiträge
    41

    Standard

    Zitat Zitat von Spooky Beitrag anzeigen
    Hast du dir die Response Header auf http://www.gidnetwork.com/tools/gzip-test.php angsehen? Ist da eh kein 301 Response drin? Die werden nicht komprimiert.

    Ansonsten verwende ich bei unseren Contao 4 Installationen mehr oder weniger die gleichen Einstellungen und da funktioniert die Kompression.
    Kannst Du das bitte noch mal bestätigen? Also das bei Dir die "normalen" contao 4 Seiten mit Kompression ausgeliefert werden (Die 404er werden bei mir komprimiert)? Wenn ja, kannst Du den relevanten Teil der htaccess oder Einstellungen in Contao hier mal hinterlassen.

    Danke.
    Adios, Stefan

Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)

Lesezeichen

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •