Wie aktiviere ich die gzip-Komprimierung für NGINX PageSpeed-Modulressourcen?


13

Ich habe mich stark darauf konzentriert, eine bestimmte Website so zu optimieren, dass sie im Google PageSpeed ​​Insights-Tool (für Handys und Desktops) 100 Punkte erzielt. Die meisten Elemente funktionieren einwandfrei, aber ich erhalte weiterhin die Warnung "Komprimierung aktivieren" für die Website.

Dies ist problematisch, da gzip auf meinem Server aktiviert ist und die einzigen Ressourcen, die unkomprimiert bereitgestellt werden, vom NGINX PageSpeed-Modul stammen. Ich habe die Konfigurationsseiten auf der Google-Website durchgesehen, aber es gibt nichts, das beschreibt, wie die Komprimierung aktiviert wird, außer der bereits vorhandenen allgemeinen NGINX-Konfiguration.

Meine Frage lautet: Wie aktiviere ich die gzip-Komprimierung, damit sie für Pagespeed-Ressourcen funktioniert?

Mein Server-Setup:

Ubuntu 12.0.4.3 LTS NGINX - Custom 1.5.4 mit PageSpeed-Modul 1.6.29.5 Beta kompiliert

NGINX Server Config:

user  www-data;
#set worker processes to cpu processes
worker_processes  4;

error_log /var/log/nginx/error.log;
pid /run/nginx.pid;
events {
        worker_connections  1024;
}


http {
        client_max_body_size 200m;
        include /etc/nginx/mime.types;
        default_type application/octet-stream;
        access_log /var/log/nginx/access.log;
        sendfile on;
        keepalive_timeout 3;
        types_hash_max_size 2048;
        gzip  on;
        gzip_disable msie6;
        gzip_static on;
        gzip_types text/plain text/css application/x-javascript text/xml application/xml+rss text/javascript;
        gzip_vary on;
        fastcgi_read_timeout 2m;

        include global/caching.conf;
        include /etc/nginx/enabled-sites/*;
        upstream php {
                server 127.0.0.1:9000;
        }
        #fastcgi caching header
        add_header mcapp-fastcgi-cache $upstream_cache_status;
}

Website-Konfiguration:

server {
        server_name www.examplesite.com;
        rewrite ^ $scheme://examplesite.com$request_uri permanent;
}

server {
        #pagespeed directives
        pagespeed On;
        pagespeed FileCachePath /var/cache/nginx-pagespeed;
        location ~ "\.pagespeed\.([a-z]\.)?[a-z]{2}\.[^.]{10}\.[^.]+" {
                add_header "" "";
        }
        location ~ "^/ngx_pagespeed_static/" { }
        location ~ "^/ngx_pagespeed_beacon$" { }
        #pagespeed directives end

        server_name examplesite.com;
        root /path/to/examplesite;

        # wordpress config
        include global/restrictions.conf;
        include global/wordpress.conf;
}

BEARBEITEN Zur weiteren Erläuterung: Die spezifischen Elemente, die scheinbar nicht komprimiert werden, sind die JavaScript-Elemente. Als Beispiel:

Enable compression for the following resources to reduce their transfer size by 355.5KiB (69% reduction).
    Compressing http://examplesite.com/wp-includes/js/jquery/jquery.js,qver=1.10.2.pagespeed.jm.iCH2ukpEYb.js could save 58.8KiB (64% reduction).
    Compressing http://examplesite.com/wp-content/themes/Avada/framework/plugins/revslider/rs-plugin/js/jquery.themepunch.revolution.min.js?ver=3.6.1 could save 43.9KiB (80% reduction).

Hast du mit anderen Tools wie Redbot nachgesehen? Ich fand Pagespeed nicht zuverlässig, besonders wenn expires 24hrsich gzip einstelle oder aus einem Grund bekomme ich immer "BEEEEP, DU HÄLST ES FALSCH". Gleiches gilt für YSLOW
der Typ von dort

Ich habe Redbot überprüft und es komprimiert die meisten Assets mit gzip (wie die tatsächlichen HTML- und CSS-Dateien). Die meisten von PageSpeed ​​bereitgestellten Javascript-Assets werden jedoch nicht komprimiert. Meine Konfiguration ist so eingestellt, dass sie die MIME-Typen application / x-javascript und text / javascript komprimiert, und ich habe überprüft, dass sie auf anderen Websites mit Javascript-Assets funktioniert. Aus irgendeinem Grund scheint es jedoch nicht für die von PageSpeed ​​bereitgestellten Assets zu funktionieren.
Scrivvles

Antworten:


16

Nachdem ich viel mehr an Haaren gezogen, Zähne geknabbert und Lautsprecher gestanzt (und gegoogelt) hatte, stieß ich in einem NGINX-Supportforum auf eine Fehleranforderung, den MIME-Typ von "application / x-javascript" (.js) zu ändern zur Anwendung / Javascript. Siehe http://trac.nginx.org/nginx/ticket/306

Wie Sie an der nginx.conf in meiner Frage sehen können, hatte ich:

gzip_types text/plain text/css application/x-javascript text/xml application/xml+rss text/javascript;

Dies hat im Wesentlichen dazu geführt, dass meine Javascript-Dateien von den gzip_types ignoriert wurden, da es keinen application / x-javascript-MIME-Typ mehr gibt (es sei denn, Sie erstellen eine benutzerdefinierte Version in der mime-types.conf oder Sie haben eine wirklich alte Version von NGINX). .

Ich habe diese Zeile in diese Zeile geändert:

gzip_types text/plain text/css application/javascript text/xml application/xml+rss;

Nach einem NGINX-s-Reload werden meine Javascript-Dateien einwandfrei komprimiert! Es stellte sich heraus, dass dies nichts mit dem PageSpeed-Modul zu tun hatte. Stattdessen war es ein Problem mit meiner Konfiguration, nicht den richtigen MIME-Typ für die Komprimierung zu identifizieren.


1
Nur eine Anmerkung - aus irgendeinem Grund musste ich beide behalten application/x-javascriptund application/javascriptda ich während meiner Anfragen beide Mimetypen bekam (ich frage mich, ob ich zu nur wechseln sollte application/javascript.
Nikola Ivanov Nikolov


2

Wie pro RFC 4329 , sollte der Webserver verwenden application/javascriptund nicht application/x-javascript.

Zunächst sollten Sie überprüfen, ob Ihre /etc/nginx/nginx.confDatei enthält (mindestens) application/javascriptneben gzip_types:

Z.B

gzip_types text/plain text/css application/javascript text/xml application/xml+rss;

Öffnen Sie dann Ihre MIME-Typendatei /etc/nginx/mime.typesund stellen Sie sicher, dass Folgendes angezeigt wird:

application/x-javascript                  js;

zu

application/javascript                  js;

Zuletzt laden Sie Ihre Konfiguration neu:

service nginx reload

Das ist es!

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.