¿Cómo habilito la compresión gzip en los recursos del módulo NGINX PageSpeed?


13

Me he centrado mucho en optimizar un determinado sitio web para que obtenga un puntaje de 100 en la herramienta Google PageSpeed ​​Insights (tanto para dispositivos móviles como de escritorio). La mayoría de los elementos funcionan perfectamente, pero sigo recibiendo la advertencia "Habilitar compresión" para el sitio web.

Esto es problemático, porque gzip está habilitado en mi servidor, y los únicos recursos que se sirven sin comprimir provienen del módulo NGINX PageSpeed. He revisado las páginas de configuración en el sitio web de Google, pero no hay nada que describa cómo habilitar la compresión, aparte de la configuración general de NGINX que ya está implementada.

Mi pregunta es esta: ¿Cómo habilito la compresión gzip para que funcione para los recursos de velocidad de página?

La configuración de mi servidor:

Ubuntu 12.0.4.3 LTS NGINX: compilación personalizada 1.5.4 con el módulo PageSpeed ​​1.6.29.5 beta

Configuración del servidor 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;
}

Configuración del sitio 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;
}

EDITAR Solo para elaborar más, los activos específicos que no parecen estar comprimiéndose son los activos de JavaScript. Como ejemplo:

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

¿Lo comprobaste con otras herramientas como redbot? encontré que la velocidad de la página no es confiable, especialmente cuando configuro gzip o expires 24hrspor alguna razón siempre obtengo "BEEEEP, LO ERES MAL". lo mismo aplica para YSLOW
ese tipo de allá

Verifiqué redbot, y está comprimiendo la mayoría de los activos con gzip (como los archivos html y css reales). Sin embargo, la mayoría de los activos de JavaScript que provienen de PageSpeed ​​no se están comprimiendo. Mi configuración está configurada para comprimir aplicaciones / x-javascript y text / javascript mime-types, y he verificado que funciona en otros sitios web que tienen activos javascript. Sin embargo, por alguna razón, no parece estar funcionando para los activos servidos de PageSpeed.
Scrivvles

Respuestas:


16

Después de mucho más tirones de cabello, crujir de dientes y perforar altavoces (y buscar en Google), me encontré con una solicitud de defecto en un foro de soporte de NGINX para cambiar el tipo mime javascript (.js) de application / x-javascript a la aplicación / javascript. Ver http://trac.nginx.org/nginx/ticket/306

Como puede ver en el nginx.conf en mi pregunta, tenía:

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

Esto estaba causando esencialmente que mis archivos javascript sean ignorados por gzip_types, porque ya NO hay una aplicación / x-javascript mime-type (a menos que haga uno personalizado en mime-types.conf o tenga una versión muy antigua de NGINX) .

Cambié esa línea a esta:

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

Después de una recarga de NGINX, mis archivos javascript se comprimen perfectamente. Entonces, resulta que no tenía nada que ver con el módulo PageSpeed, y en cambio era un problema con mi configuración que no identificaba el tipo mime correcto para comprimir.


1
Solo una nota: por alguna razón tuve que mantener ambos application/x-javascripty application/javascript, dado que durante mis solicitudes recibí ambos tipos de mimos (me pregunto si debería cambiar a solo application/javascript.)
Nikola Ivanov Nikolov


2

Según RFC 4329 , su servidor web debe usar application/javascripty no application/x-javascript.

Primero, debe verificar que su /etc/nginx/nginx.confarchivo contenga (al menos) al application/javascriptlado de gzip_types:

P.ej

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

Luego, abra su archivo de tipos MIME /etc/nginx/mime.typesy asegúrese de que si ve esto:

application/x-javascript                  js;

a

application/javascript                  js;

Finalmente, vuelva a cargar su configuración:

service nginx reload

¡Eso es!

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.