Enable Google PageSpeed Module

Modul PageSpeed dirancang untuk mengoptimalkan server web dan mempercepat respon time sehingga membuat halaman web dapat dimuat lebih cepat serta menghemat bandwidth.

Google PageSpeed merupakan modul open-source yang dibuat oleh Google dan dapat digunakan pada beberapa server web seperti Apache dan Nginx.

Build instructions

Download ngx_pagespeed dengan script berikut.

NPS_VERSION=1.13.35.2-stable
cd
wget -O- https://github.com/apache/incubator-pagespeed-ngx/archive/v${NPS_VERSION}.tar.gz | tar -xz
nps_dir=$(find . -name "*pagespeed-ngx-${NPS_VERSION}" -type d)
cd "$nps_dir"
NPS_RELEASE_NUMBER=${NPS_VERSION/beta/}
NPS_RELEASE_NUMBER=${NPS_VERSION/stable/}
psol_url=https://dl.google.com/dl/page-speed/psol/${NPS_RELEASE_NUMBER}.tar.gz
[ -e scripts/format_binary_url.sh ] && psol_url=$(scripts/format_binary_url.sh PSOL_BINARY_URL)
wget -O- ${psol_url} | tar -xz  # extracts to psol/

Cek release note untuk versi terbaru dari PageSpeed.

Selanjutnya download source code nginx sesuai versi yang Anda gunakan.

wget https://nginx.org/download/nginx-1.24.0.tar.gz
tar -xaf nginx-1.24.0.tar.gz

Pindah folder incubator-pagespeed-ngx-1.13.35.2-stable ke dalam folder nginx-1.24.0

mv incubator-pagespeed-ngx-1.13.35.2-stable nginx-1.24.0/ngx_pagespeed

Compile modul pagespeed

cd nginx-1.24.0
./configure --with-compat --add-dynamic-module=ngx_pagespeed
make modules

Jika menemukan error seperti berikut

ngx_pagespeed/src/ngx_pagespeed.cc:407:36: error: request for member ‘elts’ in ‘r->ngx_http_request_s::headers_out.ngx_http_headers_out_t::cache_control’, which is of pointer type ‘ngx_table_elt_t*’ {aka ‘ngx_table_elt_s*’} (maybe you meant to use ‘->’ ?)
   if (r->headers_out.cache_control.elts == NULL) {
                                    ^~~~
ngx_pagespeed/src/ngx_pagespeed.cc:408:35: error: cannot convert ‘ngx_table_elt_t**’ {aka ‘ngx_table_elt_s**’} to ‘ngx_array_t*’
     ngx_int_t rc = ngx_array_init(&r->headers_out.cache_control, r->pool,
                                   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Anda dapat memperbaikinya dengan men-download patch ngx_pagespeed.cc.

mv ngx_pagespeed/src/ngx_pagespeed.cc{,.bkp} -v
curl -s https://raw.githubusercontent.com/apache/incubator-pagespeed-ngx/master/src/ngx_pagespeed.cc > ngx_pagespeed/src/ngx_pagespeed.cc

Lalu ulangi proses compile.

Setelah proses compile selesai, selanjutnya copy file modul ke modules path nginx

cp objs/ngx_pagespeed.so /etc/nginx/modules/

Load module pagespeed.

nano /etc/nginx/modules.conf.d/pagespeed.conf
load_module "modules/ngx_pagespeed.so";

PageSpeed Configuration

Buat file pagespeed.conf dan edit seperti berikut

nano /etc/nginx/conf.d/pagespeed.conf
pagespeed On;
pagespeed InPlaceResourceOptimization off;
pagespeed FetchHttps enable;
pagespeed FileCachePath "/var/cache/ngx_pagespeed/";
pagespeed EnableFilters remove_comments;
pagespeed EnableFilters local_storage_cache;
pagespeed EnableFilters extend_cache_pdfs;
pagespeed EnableFilters combine_css;
pagespeed EnableFilters rewrite_css;
pagespeed EnableFilters combine_javascript;
pagespeed EnableFilters rewrite_javascript;
pagespeed EnableFilters extend_cache,rewrite_images;
#pagespeed FileCacheSizeKb 102400;
pagespeed FileCacheCleanIntervalMs 3600000;
pagespeed FileCacheInodeLimit 500000000;
pagespeed FetcherTimeoutMs 5000;

# Pagespeed Admin
pagespeed StatisticsPath /ngx_pagespeed_statistics;
pagespeed GlobalStatisticsPath /ngx_pagespeed_global_statistics;
pagespeed MessagesPath /ngx_pagespeed_message;
pagespeed ConsolePath /pagespeed_console;
pagespeed AdminPath /pagespeed_admin;
pagespeed GlobalAdminPath /pagespeed_global_admin;
pagespeed StatisticsLogging on;
pagespeed LogDir "/var/log/nginx/pagespeed/";
pagespeed MessageBufferSize 100000;

Jika ingin disable filter, maka dapat diedit seperti berikut

pagespeed DisableFilters combine_css

Lalu pada bagian Pagespeed Admin adalah opsional. Bisa Anda disable apabila tidak sedang melakukan debugging.

Restart service nginx untuk menerapkan konfigurasi.

systemctl restart nginx

Untuk mengecek PageSpeed telah aktif

$ curl -I example.com
HTTP/1.1 200 OK
Server: nginx/1.24.0
Content-Type: text/html; charset=UTF-8
Connection: keep-alive
Vary: Accept-Encoding
X-Powered-By: PHP/7.4.33
Link: <http://example.com/wp-json/>; rel="https://api.w.org/"
Link: <http://example.com/wp-json/wp/v2/pages/25>; rel="alternate"; type="application/json"
Link: <http://example.com/>; rel=shortlink
Date: Thu, 19 Oct 2023 00:43:48 GMT
X-Page-Speed: 1.13.35.2-0
Cache-Control: max-age=0, no-cache

Referensi: