Come abilito la compressione gzip sulle risorse del modulo PageSpeed ​​di NGINX?


13

Mi sono concentrato molto sull'ottimizzazione di un determinato sito Web in modo che ottenga 100 punti sullo strumento Google Page Speed ​​Insights (sia per dispositivi mobili che desktop). La maggior parte degli articoli funziona perfettamente, ma continuo a ricevere l'avviso "Abilita compressione" per il sito Web.

Questo è problematico, perché gzip è abilitato sul mio server e le uniche risorse che vengono servite non compresse provengono dal modulo NGINX PageSpeed. Ho consultato le pagine di configurazione sul sito Web di Google, ma non c'è nulla che descriva come abilitare la compressione, a parte la configurazione generale di NGINX che è già in atto.

La mia domanda è questa: come posso abilitare la compressione gzip in modo che funzioni per le risorse di velocità della pagina?

La mia configurazione del server:

Ubuntu 12.0.4.3 LTS NGINX - Compilazione personalizzata 1.5.4 con il modulo PageSpeed ​​1.6.29.5 beta

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

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

MODIFICA Solo per elaborare ulteriormente, le risorse specifiche che non sembrano comprimere sono le risorse javascript. Come esempio:

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).

hai controllato con altri strumenti come redbot? ho riscontrato che la velocità delle pagine non è affidabile, specialmente durante l'impostazione di gzip o expires 24hrsper un motivo, ottengo sempre "BEEEEP, LO STAI SBAGLIANDO". lo stesso vale per YSLOW
quel tizio di lì il

Ho controllato redbot e sta comprimendo la maggior parte delle risorse con gzip (come i file html e css effettivi). Tuttavia, la maggior parte delle risorse javascript che provengono da PageSpeed ​​non vengono compresse. La mia configurazione è impostata per comprimere i tipi mime application / x-javascript e text / javascript e ho verificato che funziona su altri siti Web che dispongono di risorse javascript. Per qualche ragione, però, non sembra funzionare per le risorse servite PageSpeed.
Scrivvles,

Risposte:


16

Dopo molta più tiratura dei capelli, digrignamento dei denti e punzonatura degli altoparlanti, (e googling), ho trovato una richiesta di difetto in un forum di supporto NGINX per cambiare il tipo mime javascript (.js) da application / x-javascript all'applicazione / javascript. Vedi http://trac.nginx.org/nginx/ticket/306

Come puoi vedere da nginx.conf nella mia domanda, ho avuto:

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

Ciò essenzialmente causava che i miei file javascript venissero ignorati da gzip_types, perché non esiste più alcuna applicazione / x-javascript mime-type (a meno che non ne si crei uno personalizzato in mime-types.conf o non si disponga di una versione molto vecchia di NGINX) .

Ho cambiato quella linea in questa:

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

Dopo un ricaricamento di NGINX, i miei file javascript vengono compressi bene! Quindi, si scopre che non aveva nulla a che fare con il modulo PageSpeed, e invece era un problema con la mia configurazione che non identificava il tipo mime corretto da comprimere.


1
Solo un appunto - per qualche motivo ho dovuto mantenere entrambi application/x-javascripte application/javascript, dato che durante le mie richieste stavo ottenendo entrambi i tipi di mimo (mi chiedo se dovrei passare a solo application/javascript.
Nikola Ivanov Nikolov,


2

Secondo RFC 4329 , il tuo server web dovrebbe usare application/javascripte non application/x-javascript.

Innanzitutto, verifica che il tuo /etc/nginx/nginx.conffile contenga (almeno) application/javascriptaccanto a gzip_types:

Per esempio

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

Quindi, apri il file dei tipi MIME /etc/nginx/mime.typese assicurati che se vedi questo:

application/x-javascript                  js;

per

application/javascript                  js;

Infine, ricarica la tua configurazione:

service nginx reload

Questo è tutto!

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.