Làm cách nào để kích hoạt Nén gzip trên tài nguyên Mô-đun NGINX PageSpeed?


13

Tôi đã tập trung rất nhiều vào việc tối ưu hóa một trang web nhất định để nó đạt 100 điểm trên công cụ Google PageSpeed ​​Insights (cho cả thiết bị di động và máy tính để bàn). Hầu hết các mục đang hoạt động hoàn hảo, nhưng tôi tiếp tục nhận được cảnh báo "Bật nén" cho trang web.

Điều này thật rắc rối, vì gzip được kích hoạt trên máy chủ của tôi và các tài nguyên duy nhất đang được phục vụ không nén được đến từ mô-đun NGINX PageSpeed. Tôi đã xem qua các trang cấu hình trên trang web của Google, nhưng không có gì mô tả cách kích hoạt tính năng nén, ngoài cấu hình NGINX chung đã có sẵn.

Câu hỏi của tôi là: Làm cách nào để kích hoạt tính năng nén gzip để nó hoạt động cho tài nguyên trang?

Thiết lập máy chủ của tôi:

Ubuntu 12.0.4.3 LTS NGINX - Được biên dịch tùy chỉnh 1.5.4 với mô-đun PageSpeed ​​1.6.29.5 beta

Cấu hình máy chủ 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;
}

Cấu hình trang 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 Chỉ cần giải thích thêm, các tài sản cụ thể dường như không được nén là các tài sản javascript. Ví dụ:

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

bạn đã kiểm tra với các công cụ khác như redbot chưa? Tôi thấy các trang không đáng tin cậy, đặc biệt là khi cài đặt gzip hoặc expires 24hrsvì một lý do tôi luôn nhận được "BEEEEP, BẠN ĐANG GIỮ NÓ SAU". áp dụng tương tự cho YSLOW
anh chàng đó từ đó đến

Tôi đã kiểm tra redbot và nó đang nén hầu hết các tài sản bằng gzip (chẳng hạn như các tệp html và css thực tế). Tuy nhiên, hầu hết các tài sản javascript đến từ PageSpeed ​​không được nén. Cấu hình của tôi được đặt để nén các loại mime ứng dụng / x-javascript và text / javascript và tôi đã xác minh rằng nó hoạt động trên các trang web khác có tài sản javascript. Vì một số lý do, có vẻ như nó không hoạt động đối với các tài sản được phục vụ của PageSpeed.
Scrivvles

Câu trả lời:


16

Sau nhiều lần nhổ tóc, nghiến răng và đấm loa, (và Googling), tôi đã gặp một yêu cầu khiếm khuyết trong một diễn đàn hỗ trợ NGINX để thay đổi loại mime javascript (.js) từ ứng dụng / x-javascript để ứng dụng / javascript. Xem http://trac.nginx.org/nginx/ticket/306

Như bạn có thể thấy bởi nginx.conf trong câu hỏi của tôi, tôi đã có:

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

Điều này về cơ bản khiến các tệp javascript của tôi bị gzip_types bỏ qua, bởi vì không còn loại mime ứng dụng / x-javascript nữa (trừ khi bạn tạo một tệp tùy chỉnh trong mime-type.conf hoặc bạn có phiên bản NGINX thực sự cũ) .

Tôi đã thay đổi dòng này thành dòng này:

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

Sau khi tải lại NGINX, các tệp javascript của tôi nén tốt! Vì vậy, hóa ra nó không liên quan gì đến mô-đun PageSpeed ​​và thay vào đó là một vấn đề với cấu hình của tôi không xác định loại mime chính xác để nén.


1
Chỉ là một lưu ý - vì một số lý do tôi đã phải giữ cả hai application/x-javascriptapplication/javascript, vì trong các yêu cầu của tôi, tôi đã nhận được cả hai loại mime (tôi tự hỏi liệu tôi có nên chuyển sang chỉ application/javascript.
Nikola Ivanov Nikolov


2

Theo RFC 4329 , máy chủ web của bạn nên sử dụng application/javascriptvà không application/x-javascript.

Trước tiên, bạn nên kiểm tra xem /etc/nginx/nginx.conftệp của bạn có chứa (ít nhất) application/javascriptbên cạnh gzip_types:

Ví dụ

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

Sau đó, mở tệp loại MIME của bạn /etc/nginx/mime.typesvà đảm bảo rằng nếu bạn thấy điều này:

application/x-javascript                  js;

đến

application/javascript                  js;

Cuối cùng, tải lại cấu hình của bạn:

service nginx reload

Đó là nó!

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.