Comment activer la compression gzip sur les ressources du module NGINX PageSpeed?

13

Je me suis beaucoup concentré sur l'optimisation d'un certain site Web afin qu'il obtienne un score de 100 sur l'outil Google PageSpeed ​​Insights (pour mobile et pour ordinateur). La plupart des éléments fonctionnent parfaitement, mais je continue de recevoir l'avertissement «Activer la compression» pour le site Web.

C'est gênant, car gzip est activé sur mon serveur, et les seules ressources qui sont servies non compressées proviennent du module NGINX PageSpeed. J'ai parcouru les pages de configuration sur le site Web de Google, mais rien ne décrit comment activer la compression, à part la configuration générale de NGINX qui est déjà en place.

Ma question est la suivante: comment activer la compression gzip pour qu'elle fonctionne pour les ressources de pagespeed?

Configuration de mon serveur:

Ubuntu 12.0.4.3 LTS NGINX - 1.5.4 compilé avec le module PageSpeed ​​1.6.29.5 beta

Configuration du serveur NGINX:

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;
}

Configuration du site Web:

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;
}

EDIT Juste pour développer davantage, les actifs spécifiques qui ne semblent pas être compressés sont les actifs javascript. Par exemple:

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).
Scrivvles
la source
avez-vous vérifié avec d'autres outils comme redbot? j'ai trouvé pagespeed pas fiable, en particulier lors de la configuration de gzip ou expires 24hrspour une raison que je reçois toujours "BEEEEP, YOU'RE HOLDING IT WRONG". il en va de même pour YSLOW
ce gars de là-bas
J'ai vérifié redbot, et il compresse la plupart des actifs avec gzip (tels que les fichiers html et css réels). Cependant, la plupart des actifs javascript qui proviennent de PageSpeed ​​ne sont pas compressés. Ma configuration est configurée pour compresser les types MIME application / x-javascript et text / javascript, et j'ai vérifié que cela fonctionne sur d'autres sites Web qui ont des actifs javascript. Cependant, pour une raison quelconque, cela ne semble tout simplement pas fonctionner pour les ressources desservies par PageSpeed.
Scrivvles

Réponses:

16

Après beaucoup plus de tirages de cheveux, de grincements de dents et de poinçonnage de haut-parleur (et de recherche sur Google), je suis tombé sur une demande de défaut dans un forum de support NGINX pour changer le type mime javascript (.js) de application / x-javascript à l'application / javascript. Voir http://trac.nginx.org/nginx/ticket/306

Comme vous pouvez le voir par le nginx.conf dans ma question, j'avais:

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

Cela provoquait essentiellement l'ignorance de mes fichiers javascript par les gzip_types, car il n'y a plus de type mime application / x-javascript (sauf si vous en créez un personnalisé dans mime-types.conf ou si vous avez une très ancienne version de NGINX) .

J'ai changé cette ligne en celle-ci:

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

Après un rechargement de NGINX, mes fichiers javascript se compressent très bien! Donc, il s'avère que cela n'avait rien à voir avec le module PageSpeed, et à la place, c'était un problème avec ma configuration qui n'identifiait pas le type mime correct à compresser.

Scrivvles
la source
1
Juste une note - pour une raison quelconque, j'ai dû garder les deux application/x-javascriptet application/javascript, puisque pendant mes demandes, j'obtenais les deux types de mime (je me demande si je devrais passer à juste application/javascript.
Nikola Ivanov Nikolov
2

Conformément à la RFC 4329 , votre serveur Web doit utiliser application/javascriptet non application/x-javascript.

Tout d'abord, vous devez vérifier que votre /etc/nginx/nginx.conffichier contient (au moins) à application/javascriptcôté de gzip_types:

Par exemple

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

Ensuite, ouvrez votre fichier de types MIME /etc/nginx/mime.typeset assurez-vous que si vous voyez ceci:

application/x-javascript                  js;

à

application/javascript                  js;

Enfin, rechargez votre configuration:

service nginx reload

C'est ça!

Maxime
la source