Jak włączyć kompresję gzip w zasobach modułu NGINX PageSpeed?

13

Koncentruję się mocno na optymalizacji pewnej witryny, aby uzyskała 100 w narzędziu Google PageSpeed ​​Insights (na urządzenia mobilne i stacjonarne). Większość elementów działa bezbłędnie, ale nadal pojawia się ostrzeżenie „Włącz kompresję” dla witryny.

Jest to kłopotliwe, ponieważ gzip jest włączony na moim serwerze, a jedyne zasoby, które są obsługiwane bez kompresji, pochodzą z modułu NGINX PageSpeed. Przeglądałem strony konfiguracji w witrynie Google, ale nie ma nic, co opisuje sposób włączenia kompresji, oprócz ogólnej konfiguracji NGINX, która jest już na miejscu.

Moje pytanie brzmi: jak włączyć kompresję gzip, aby działała dla zasobów strony?

Konfiguracja mojego serwera:

Ubuntu 12.0.4.3 LTS NGINX - skompilowane na zamówienie 1.5.4 z modułem PageSpeed ​​1.6.29.5 w wersji beta

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

Konfiguracja strony internetowej:

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

EDYCJA W celu dalszego opracowania, konkretnymi zasobami, które nie wydają się kompresować, są zasoby javascript. Jako przykład:

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
źródło
sprawdziłeś za pomocą innych narzędzi, takich jak Redbot? znalazłem prędkość strony niewiarygodną, ​​szczególnie przy ustawianiu gzip lub expires 24hrsz jakiegoś powodu zawsze pojawia się komunikat „BEEEEP, YOU'RE HOLDING IT WRONG”. to samo dotyczy YSLOW
ten facet stamtąd
Sprawdziłem redbota, który kompresuje większość zasobów za pomocą gzip (takich jak rzeczywiste pliki HTML i CSS). Jednak większość zasobów javascript pochodzących z PageSpeed ​​nie jest kompresowana. Moja konfiguracja jest ustawiona na kompresowanie typów MIME application / x-javascript i text / javascript, a ja sprawdziłem, czy działa na innych stronach internetowych, które mają zasoby javascript. Jednak z jakiegoś powodu po prostu nie działa w przypadku zasobów obsługiwanych przez PageSpeed.
Scrivvles,

Odpowiedzi:

16

Po dużo więcej wyrywania włosów, zgrzytania zębami i dziurkowania głośników (i Googlinga), natknąłem się na prośbę o defekt na forum wsparcia NGINX, aby zmienić typ MIME javascript (.js) z application / x-javascript do application / javascript. Zobacz http://trac.nginx.org/nginx/ticket/306

Jak widać w nginx.conf w moim pytaniu, miałem:

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

To spowodowało, że moje pliki javascript zostały zignorowane przez gzip_types, ponieważ nie ma już aplikacji / m-javascript typu mime (chyba że utworzysz niestandardowy plik w mime-types.conf lub masz naprawdę starą wersję NGINX) .

Zmieniłem ten wiersz na ten:

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

Po przeładowaniu NGINX-a moje pliki javascript kompresują się dobrze! Okazuje się, że nie miało to nic wspólnego z modułem PageSpeed, a zamiast tego był problem z moją konfiguracją, która nie zidentyfikowała właściwego typu MIME do kompresji.

Scrivvles
źródło
1
Tylko uwaga - z jakiegoś powodu musiałem zachować zarówno application/x-javascripti application/javascript, ponieważ podczas mojej prośby byłem coraz oba typy MIME (zastanawiam się, czy warto przejść się po prostu application/javascript.
Nikola Ivanov Nikolov
2

Zgodnie z RFC 4329 twój serwer powinien używać, application/javascripta nie używać application/x-javascript.

Najpierw sprawdź, czy /etc/nginx/nginx.confplik zawiera (przynajmniej) application/javascriptobok gzip_types:

Na przykład

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

Następnie otwórz plik typów MIME /etc/nginx/mime.typesi upewnij się, że jeśli to zobaczysz:

application/x-javascript                  js;

do

application/javascript                  js;

Na koniec załaduj ponownie konfigurację:

service nginx reload

Otóż ​​to!

Maxime
źródło