Mempercepat Kinerja Nginx dengan Ngx_Pagespeed di CentOS 7


Nginx [engine x] adalah server web gratis dan sumber terbuka, lintas platform, kuat, dan perangkat lunak proksi terbalik yang ditulis dalam C. Ini juga merupakan server proksi IMAP/POP3 dan TCP/UDP standar, dan dapat digunakan sebagai penyeimbang beban.

Nginx adalah server HTTP terkenal (sebanding dengan server HTTP Apache) yang mendukung banyak situs di web; ini populer karena kinerja tinggi dan stabilitasnya.

Ada berbagai faktor penting yang perlu dipertimbangkan ketika Anda ingin meningkatkan pengalaman pengguna di situs Anda, termasuk kecepatan situs dan kecepatan halaman (juga dikenal sebagai waktu buka halaman). Jika situs Anda didukung oleh Nginx, Anda dapat menggunakan ngx_pagespeed untuk tujuan ini.

Bacaan yang Disarankan: Instal Mod_Pagespeed untuk Meningkatkan Kinerja Server Apache

Ngx_pagespeed adalah modul Nginx gratis dan sumber terbuka yang digunakan untuk meningkatkan kecepatan situs serta mengurangi waktu buka halaman. Ini secara signifikan mengurangi waktu yang dibutuhkan pengguna untuk melihat dan berinteraksi dengan konten situs Anda.

Fitur Ngx_pagespeed:

  • Dukungan untuk HTTPS dan kontrol URL.
  • Pengoptimalan gambar: menghapus metadata, pengubahan ukuran dinamis, kompresi ulang.
  • Minifikasi, penggabungan, penyisipan, dan penguraian CSS & JavaScript.
  • Sebarisan sumber daya kecil.
  • Menunda pemuatan gambar dan JavaScript.
  • penulisan ulang HTML.
  • Ekstensi seumur hidup cache.
  • Memungkinkan konfigurasi untuk beberapa server dan banyak lainnya.

Dalam tutorial ini, kami akan menunjukkan cara menginstal Nginx dengan ngx_pagespeed dan menguji keseluruhan instalasi di RHEL/CentOS 7.

Perhatian: Pengguna Debian dan Ubuntu dapat mengikuti panduan ini untuk Menginstal Ngx_Pagespeed untuk Meningkatkan Kinerja Nginx.

Langkah 1: Instal Nginx dari Sumber

1. Untuk menginstal Nginx dengan ngx_pagespeed mengharuskan Anda mengompilasinya dari sumber. Pertama instal semua paket yang diperlukan untuk mengkompilasi Nginx dari sumber seperti ini.

yum install wget gcc cmake unzip gcc-c++ pcre-devel zlib-devel
OR
yum group install "Development Tools"

2. Selanjutnya, dapatkan file sumber Nginx versi terbaru (1.13.2 pada saat penulisan ini) menggunakan perintah wget dan ekstrak tar ball yang diunduh seperti di bawah ini .

mkdir ~/downloads
cd ~/downloads
wget -c https://nginx.org/download/nginx-1.13.2.tar.gz
tar -xzvf nginx-1.13.2.tar.gz

3. Selanjutnya, unduh file sumber ngx_pagespeed dan unzip file terkompresi.

wget -c https://github.com/pagespeed/ngx_pagespeed/archive/v1.12.34.2-stable.zip
unzip v1.12.34.2-stable.zip

4. Sekarang pindah ke direktori ngx_pagespeed yang belum di-zip dan dapatkan pustaka optimasi PageSpeed untuk mengkompilasi Nginx sebagai berikut.

cd ngx_pagespeed-1.12.34.2-stable/
wget -c https://dl.google.com/dl/page-speed/psol/1.12.34.2-x64.tar.gz
tar -xvzf 1.12.34.2-x64.tar.gz

Langkah 2: Konfigurasikan dan Kompilasi Nginx dengan Ngx_Pagespeed

5. Sekarang masuk ke direktori nginx-1.13.2, dan konfigurasikan sumber Nginx dengan menjalankan perintah di bawah ini.

cd ~/downloads/nginx-1.13.2
./configure --add-module=$HOME/downloads/ngx_pagespeed-1.12.34.2-stable/ --user=nobody --group=nobody --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid ${PS_NGX_EXTRA_FLAGS}

6. Selanjutnya, kompilasi dan instal Nginx sebagai berikut.

make
make install

7. Ketika proses instalasi selesai, buat semua symlink yang diperlukan untuk Nginx.

ln -s /usr/local/nginx/conf/ /etc/nginx/
ln -s /usr/local/nginx/sbin/nginx /usr/sbin/nginx

Langkah 3: Membuat File Unit Nginx untuk SystemD

8. Selanjutnya, karena systemd adalah sistem init di CentOS 7, Anda perlu membuat unit Nginx secara manual mengajukan untuk itu.

Pertama, buat file /lib/systemd/system/nginx.service, lalu ambil file layanan sistem NGINX, tempelkan konfigurasi file unit ke file di bawah ini.

vi /lib/systemd/system/nginx.service

Catat lokasi PIDFile dan biner NGINX yang Anda atur saat mengkonfigurasi dan mengkompilasi Nginx, Anda akan mengaturnya dalam variabel yang sesuai di file unit seperti yang ditunjukkan di bawah ini :

[Unit]
Description=The NGINX HTTP and reverse proxy server
After=syslog.target network.target remote-fs.target nss-lookup.target

[Service]
Type=forking
PIDFile=/var/run/nginx.pid
ExecStartPre=/usr/sbin/nginx -t
ExecStart=/usr/sbin/nginx
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true

[Install]
WantedBy=multi-user.target

Simpan file dan tutup.

9. Pada titik ini, jalankan layanan nginx untuk sementara waktu dan aktifkan layanan tersebut untuk memulai saat boot sistem dengan menjalankan perintah di bawah ini.

systemctl start nginx
systemctl enable nginx
systemctl status nginx

Langkah 4: Konfigurasikan Nginx Dengan Modul Pagespeed

10. Setelah Nginx terinstal, selanjutnya Anda perlu mengaktifkan modul Ngx_pagespeed. Mulailah dengan membuat direktori tempat modul akan menyimpan file untuk situs web Anda dalam cache dan atur izin yang sesuai pada direktori ini dengan perintah di bawah ini.

mkdir -p /var/ngx_pagespeed_cache
chown -R nobody:nobody /var/ngx_pagespeed_cache

11. Sekarang saatnya mengaktifkan modul Ngx_pagespeed, buka file konfigurasi Nginx dan tambahkan baris di bawah.

Penting: Jika Anda telah mengonfigurasi host virtual nginx apa pun di server, tambahkan arahan kecepatan halaman di atas ke setiap blok server untuk mengaktifkan Ngx_pagespeed di setiap situs.

vi /etc/nginx/nginx.conf

Tambahkan baris konfigurasi Ngx_pagespeed berikut dalam blok server.

Pagespeed main settings

pagespeed on;
pagespeed FileCachePath /var/ngx_pagespeed_cache;


Ensure requests for pagespeed optimized resources go to the pagespeed
handler and no extraneous headers get set.

location ~ "\.pagespeed\.([a-z]\.)?[a-z]{2}\.[^.]{10}\.[^.]+" { add_header "" ""; }
location ~ "^/ngx_pagespeed_static/" { }
location ~ "^/ngx_pagespeed_beacon" { }

Berikut ini adalah contoh kerja file konfigurasi Nginx dengan Ngx_pagespeed diaktifkan di host virtual default.

#user  nobody;
worker_processes  1;
#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;
#pid        logs/nginx.pid;
events {
    worker_connections  1024;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
    #                  '$status $body_bytes_sent "$http_referer" '
    #                  '"$http_user_agent" "$http_x_forwarded_for"';

    #access_log  logs/access.log  main;
    sendfile        on;
    #tcp_nopush     on;
    #keepalive_timeout  0;
    keepalive_timeout  65;
    #gzip  on;
    server {
        listen       80;
        server_name  localhost; 
        #charset koi8-r;
        #access_log  logs/host.access.log  main;

        # Pagespeed main settings
        pagespeed on;
        pagespeed FileCachePath /var/ngx_pagespeed_cache;

        # Ensure requests for pagespeed optimized resources go to the pagespeed
        # handler and no extraneous headers get set.

        location ~ "\.pagespeed\.([a-z]\.)?[a-z]{2}\.[^.]{10}\.[^.]+" { add_header "" ""; }
        location ~ "^/ngx_pagespeed_static/" { }
        location ~ "^/ngx_pagespeed_beacon" { }

        location / {
            root   html;
            index  index.html index.htm;
        }
        #error_page  404              /404.html;
        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
        # proxy the PHP scripts to Apache listening on 127.0.0.1:80
        #
        #location ~ \.php$ {
        #    proxy_pass   http://127.0.0.1;
        #}
        # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
        #
        #location ~ \.php$ {
        #    root           html;
        #    fastcgi_pass   127.0.0.1:9000;
        #    fastcgi_index  index.php;
        #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
        #    include        fastcgi_params;
        #}

        # deny access to .htaccess files, if Apache's document root
        # concurs with nginx's one
        #
        #location ~ /\.ht {
        #    deny  all;
        #}
    }

    # another virtual host using mix of IP-, name-, and port-based configuration
    #
    #server {
    #    listen       8000;
    #    listen       somename:8080;
    #    server_name  somename  alias  another.alias;

    #    location / {
    #        root   html;
    #        index  index.html index.htm;
    #    }
    #}

    # HTTPS server
    #
    #server {
    #    listen       443 ssl;
    #    server_name  localhost;

    #    ssl_certificate      cert.pem;
    #    ssl_certificate_key  cert.key;

    #    ssl_session_cache    shared:SSL:1m;
    #    ssl_session_timeout  5m;

    #    ssl_ciphers  HIGH:!aNULL:!MD5;
    #    ssl_prefer_server_ciphers  on;

    #    location / {
    #        root   html;
    #        index  index.html index.htm;
    #    }
    #}

}

12. Setelah itu, pastikan file konfigurasi Nginx bebas dari kesalahan dengan menjalankan perintah di bawah ini, Anda akan melihat output di bawah ini jika semuanya baik-baik saja.

nginx -t

13. Terakhir, restart server Nginx agar perubahan diterapkan.

systemctl restart nginx

Langkah 5: Menguji Nginx dengan Ngx_pagespeed

14. Untuk mengetahui apakah Ngx_pagespeed sekarang berfungsi bersama dengan Nginx, maka harus muncul di header X-Page-Speed.

curl -I -p http://localhost

Jika Anda gagal melihat header di atas, kembali ke langkah 11 dan ikuti instruksi dengan cermat untuk mengaktifkan Ngx-pagespeed dengan langkah selanjutnya.

Repositori Github Ngx-pagespeed: https://github.com/pagespeed/ngx_pagespeed

Itu semuanya! Dalam tutorial ini, kami menunjukkan cara menginstal dan mengkonfigurasi Nginx dengan modul Ngx_pagespeed untuk mengoptimalkan dan meningkatkan kinerja situs serta mengurangi waktu buka halaman.

Untuk mengamankan server web Nginx, baca artikel ini – Panduan Utama untuk Mengamankan, Memperkuat, dan Meningkatkan Kinerja Server Web Nginx.

Seperti biasa, jangan ragu untuk memberi tahu kami pertanyaan atau pemikiran apa pun mengenai tutorial ini.