Bagaimana cara saya mengaktifkan Kompresi gzip pada sumber daya NGINX PageSpeed ​​Module?

13

Saya telah sangat fokus pada pengoptimalan situs web tertentu sehingga skor 100 pada alat Google PageSpeed ​​Insights (untuk seluler dan desktop). Sebagian besar item berfungsi dengan sempurna, tetapi saya terus mendapatkan peringatan "Aktifkan Kompresi" untuk situs web.

Ini merepotkan, karena gzip diaktifkan di server saya, dan satu-satunya sumber daya yang dilayani tidak terkompresi berasal dari modul NGINX PageSpeed. Saya telah melewati halaman konfigurasi di situs web Google, tetapi tidak ada yang menjelaskan cara mengaktifkan kompresi, selain konfigurasi NGINX umum yang sudah ada.

Pertanyaan saya adalah ini: Bagaimana cara saya mengaktifkan kompresi gzip sehingga berfungsi untuk sumber daya kecepatan halaman?

Penyiapan server saya:

Ubuntu 12.0.4.3 LTS NGINX - Kustom dikompilasi 1.5.4 dengan modul PageSpeed ​​1.6.29.5 beta

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

Konfigurasi Situs 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 Hanya untuk menjelaskan lebih lanjut, aset spesifik yang tampaknya tidak dapat dikompresi adalah aset javascript. Sebagai contoh:

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
sumber
apakah Anda memeriksa dengan alat lain seperti redbot? Saya menemukan halamanpeed tidak dapat diandalkan, terutama ketika mengatur gzip atau expires 24hrskarena alasan saya selalu mendapatkan "BEEEEP, ANDA TAHAN ITU SALAH". Hal yang sama berlaku untuk YSLOW
pria itu dari sana
Saya memang memeriksa redbot, dan itu mengompresi sebagian besar aset dengan gzip (seperti file html dan css yang sebenarnya). Namun, sebagian besar aset javascript yang berasal dari PageSpeed ​​tidak dikompresi. Konfigurasi saya diatur untuk mengompres tipe aplikasi / x-javascript dan teks / javascript, dan saya telah memverifikasi bahwa itu berfungsi di situs web lain yang memiliki aset javascript. Namun untuk beberapa alasan, sepertinya itu tidak berfungsi untuk aset yang dilayani PageSpeed.
Scrivvles

Jawaban:

16

Setelah lebih banyak mencabut rambut, menggertakkan gigi, dan meninju pembicara, (dan Googling), saya menemukan permintaan cacat di forum dukungan NGINX untuk mengubah tipe javascript (.js) mime-type dari application / x-javascript ke aplikasi / javascript. Lihat http://trac.nginx.org/nginx/ticket/306

Seperti yang Anda lihat di nginx.conf dalam pertanyaan saya, saya punya:

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

Ini pada dasarnya menyebabkan file javascript saya diabaikan oleh gzip_types, karena tidak ada lagi aplikasi / tipe-x-javascript mime (kecuali jika Anda membuat kustom di mime-types.conf atau Anda memiliki versi NGINX yang benar-benar lama) .

Saya mengubah baris itu menjadi yang ini:

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

Setelah NGINX -s dimuat ulang, file javascript saya kompres dengan baik! Jadi, ternyata itu tidak ada hubungannya dengan modul PageSpeed, dan sebagai gantinya ada masalah dengan konfigurasi saya yang tidak mengidentifikasi tipe mime yang benar untuk dikompres.

Scrivvles
sumber
1
Hanya catatan - untuk beberapa alasan aku harus menjaga kedua application/x-javascriptdan application/javascript, karena selama permintaan saya saya mendapatkan kedua jenis mime (Aku ingin tahu apakah saya harus beralih ke hanya application/javascript.
Nikola Ivanov Nikolov
2

Sesuai RFC 4329 , server web Anda harus menggunakan application/javascriptdan tidak application/x-javascript.

Pertama, Anda harus memeriksa apakah /etc/nginx/nginx.conffile Anda mengandung (setidaknya) di application/javascriptsebelah gzip_types:

Misalnya

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

Lalu, buka file jenis MIME Anda /etc/nginx/mime.typesdan pastikan bahwa jika Anda melihat ini:

application/x-javascript                  js;

untuk

application/javascript                  js;

Terakhir, muat ulang konfigurasi Anda:

service nginx reload

Itu dia!

Maxime
sumber