Rumahweb Journal
Banner - Apa itu Varnish Cache Adalah

Varnish Cache: Pengertian dan Cara Konfigurasinya di Nginx

Bagaimana sebuah website dapat berjalan dengan cepat? Salah satu jawabannya adalah dengan memanfaatkan cache pada website hingga browser. Varnish Cache adalah salah satu opsi yang dapat Anda pertimbangkan untuk meningkatkan kecepatan website di server Nginx.

Dalam artikel ini, kami akan berbagi informasi tentang apa itu Varnish Cache hingga cara konfigurasinya di web server Nginx untuk meningkatkan kecepatan akses website. Simak informasi berikut ini.

Apa itu Varnish?

Varnish adalah software open source yang berfungsi sebagai web accelerator dengan menggunakan cache dan reverse proxy. Varnish dirancang untuk meningkatkan performa website dengan menggunakan caching tingkat tinggi di sisi server, dimana Varnish bekerja sebagai reverse proxy cache diantara client dan webserver.

Varnish dikhususkan untuk website Dynamic yang memiliki akses atau traffic yang sangat tinggi. Dengan memanfaatkan cache pada varnish, server dapat mengurangi kecepatan response, dan beban disisi webserver utama untuk mencegah terjadinya overload disisi Webserver.

Varnish Cache juga mengadopsi konsep “hashing” untuk mengelompokkan jenis permintaan yang serupa. Permintaan dengan jenis yang sama akan diarahkan ke cache yang sama, mengurangi jumlah permintaan yang harus diarahkan ke webserver backend. Ini membantu dalam mengurangi beban server dan meningkatkan efisiensi.

Fungsi Varnish Cache di Nginx

Varnish cache dapat digunakan bersama dengan Nginx untuk meningkatkan performa dan kecepatan pengiriman konten pada pengguna.

Varnish dan Nginx adalah kombinasi yang sangat tepat. Hal ini karena Nginx dikhususkan untuk menangani high availability (webserver kinerja tinggi) dan akan membutuhkan cache sebagai optimalisasi fungsi seperti CDN.

Berikut adalah beberapa fungsi Varnish di Nginx.

1. Kecepatan Tinggi

Nginx memiliki kecepatan pengiriman yang tinggi dan efisien. Ketika Nginx digabungkan dengan Varnish Cache, kecepatan ini dapat lebih ditingkatkan karena Varnish akan menyimpan salinan halaman yang sering diminta dalam memori varnish.

Hal ini memungkinkan ketika terdapat permintaan (request), Varnish dapat memprosesnya secara langsung tanpa harus melibatkan backend Nginx.

2. Penurunan beban Server

Dengan Varnish Cache di depan Nginx, sebagian besar permintaan pengguna dapat direspons oleh Varnish tanpa perlu mengakses server Nginx atau aplikasi web di belakangnya. Ini mengurangi beban pada server Nginx dan memberikan kemampuan untuk menangani lebih banyak permintaan dengan cepat.

3. Dynamic Cache

Varnish dapat melakukan caching pada konten statik dan dinamis, varnish dapat bekerja secara optimal dengan menggunakan cms seperti WordPress, Drupal, dan CMS lainnya dengan cara mengambil beberapa elemen yang tidak berubah secara sering dari cache tanpa perlu membebani server aplikasi.

4. Manage Cache yang mudah

Varnish memiliki fitur konfigurasi cache yang fleksibel. Kita dapat mengatur bagaimana konten di-cache, berapa lama konten akan disimpan dalam cache memory, dan bagaimana penanganan cache diatur berdasarkan jenis konten dan permintaan.

5. Penanganan respon DDOS

Varnish juga dapat berfungsi sebagai lapisan pertahanan tambahan untuk melindungi webserver backend dari serangan DDoS atau serangan lainnya. Dengan melakukan filtering sebagian besar permintaan sebelum mencapai server backend, Varnish dapat membantu mengurangi dampak serangan tersebut.

Cara install dan konfigurasi Varnish Cache

Pada panduan kali ini, kami akan melakukan instalasi varnish cache sebagai reverse proxy untuk Nginx di OS Ubuntu 20.04. Konfigurasi ini telah dicoba dan telah berjalan sangat optimal pada OS Ubuntu 20.04 dan OS Debian 11.

Step 1. Persiapan Sistem

Sebelum melakukan instalasi Varnish cache di Nginx, pastikan sistem yang Anda bangun telah memenuhi sistem requirement berikut ini.

  • OS Ubuntu 20.04 atau Debian 11 bullseye
  • RAM 2 GB dan Disk Storage minimal 10GB
  • Virtualisasi KVM akan lebih baik

Pada demo kali ini, kami menggunakan VPS KVM Rumahweb dengan spesifikasi paket M. Setelah memastikan telah memenuhi sistem requirement, Anda bisa mengikuti step berikut untuk cara install webserver nginx hingga konfigurasi varnish di nginx.

Step 2. Installasi Webserver Nginx

Sebelum melakukan konfigurasi Varnish, kita akan melakukan installasi nginx webserver dan melakukan konfigurasi pada worker Nginx agar berjalan optimal.

apt update
apt upgrade -y
apt install nginx
apt inatall nginx-extras

Setelah Installasi Nginx, kita akan melakukan konfigurasi pada virtualhost Nginx agar Default berjalan pada port 8080.

nano /etc/nginx/sites-available/default
server {         

     listen 80 default_server;         

     listen [::]:80 default_server;

Pada listen 80, ubah menjadi listen 8080, begitupun pada server block lainnya yang ada pada folder conf.d.

server {         

     listen 80 default_server;         

     listen [::]:80 default_server;

Selanjutnya, lakukan konfigurasi custom yang telah kami optimalkan sebagai berikut pada /etc/nginx/nginx.conf.

user www-data;
worker_processes auto;
pid /run/nginx.pid;
worker_rlimit_nofile 100000;     #Sesuaikan sesuai RAM
include /etc/nginx/modules-enabled/*.conf;
events {
        worker_connections 80920; #Sesuaikan RAM
        multi_accept on;
        use epoll;
}

http {
       #Konfig Custom

       set_real_ip_from 127.0.0.1;
       real_ip_header X-Forwarded-For;
       
       open_file_cache max=29100 inactive=20s;
       open_file_cache_valid 35s;
       open_file_cache_min_uses 2;
       open_file_cache_errors on;

          # buffers
       fastcgi_buffer_size 128k;
       fastcgi_buffers 256 16k;
       fastcgi_busy_buffers_size 256k;
       fastcgi_temp_file_write_size 256k;
       proxy_buffer_size   128k; 
       proxy_buffers   4 256k;
       proxy_busy_buffers_size   256k;
       fastcgi_read_timeout 150;
#       fastcgi_cache_path /var/cache/nginx/fastcgi_cache levels=1:2 keys_zone=fastcgi_cache:16m max_size=256m inactive=1d;
#       fastcgi_temp_path /var/cache/nginx/fastcgi_temp 1 2;

        #limit ddos attack
        limit_conn_zone $binary_remote_addr zone=perip:10m;
        limit_conn perip 30;
        limit_req_zone $binary_remote_addr zone=engine:10m rate=2r/s;
        limit_req_zone $binary_remote_addr zone=static:10m rate=100r/s;

        #Konfigurasi Header
        sendfile on;
        tcp_nopush on;
        tcp_nodelay on;
        keepalive_timeout 65;
        types_hash_max_size 2048;
        server_tokens off;
        more_set_headers 'Server: Varnish RumahWeb;
        include /etc/nginx/mime.types;
        default_type application/octet-stream;
        server_names_hash_bucket_size 64;
        server_names_hash_max_size 4096;

        ##
        # Setting untuk ssl
        ##
        ssl_protocols TLSv1.2 TLSv1.3; # Dropping SSLv3, ref: POODLE
        ssl_prefer_server_ciphers on;

        ##
        # Logging Akses
        ##
        access_log /var/log/nginx/access.log;
        error_log /var/log/nginx/error.log;

      log_format custom '$remote_addr - $remote_user [$time_local] '
                         '"$request" $status $body_bytes_sent '
                         '"$http_referer" "$http_user_agent""$gzip_ratio"';

        ##
        # Konfigurasi Gzip
        ##
        gzip on;
        gzip_min_length 10240;
        gzip_comp_level 5;
        gzip_vary on;
        gzip_disable msie6;
        gzip_proxied any;
        gzip_types

        # Kompresi Untuk Gzip
        text/css
        text/javascript
        text/xml
        text/plain
        text/x-component
        application/javascript
        application/x-javascript
        application/json
        application/xml
        application/rss+xml
        application/atom+xml
        font/truetype
        font/opentype
        application/vnd.ms-fontobject
        image/svg+xml;

        ##
        # Virtual Host 
        ##
        reset_timedout_connection on;
        client_body_buffer_size 10K;
        client_header_buffer_size 1k;
        client_max_body_size 8m;
        large_client_header_buffers 4 4k;
        client_body_timeout 10;
        client_header_timeout 10;
        send_timeout 8;
        keepalive_requests 100000;
        include /etc/nginx/conf.d/*.conf;
        include /etc/nginx/sites-enabled/*;
}

Setelah dilakukan penyesuaian, simpan konfigurasi Nginx dan pastikan Nginx berjalan pada port 8080 dengan meng-eksekusi command.

systemctl restart nginx

systemctl reload nginx

netstat -antp atau ss -tlnf inet

output :

port server vps

Step 3. Konfigurasi Varnish Cache

Tahap pertama adalah installasi Varnish Cache pada server,

sudo apt-get install varnish

Setelah dilakukan installasi varnish, Langkah selanjutnya adalah mengarahkan lalu lintas Nginx melalui Varnish. Caranya dengan mengubah port varnish 6081 menjadi port 80.

Untuk melakukan perbahan tersebut edit file konfigurasi yang terdapat pada /lib/systemd/system/varnish.service.

sudo nano /lib/systemd/system/varnish.service

Isi pada konfigurasi Varnish cache sebagai berikut : 

[Unit]
 Description=Varnish HTTP accelerator
 Documentation=https://www.varnish-cache.org/docs/4.1/ man:varnishd

[Service]
 Type=simple
 LimitNOFILE=131072
 LimitMEMLOCK=82000

 ExecStart=/usr/sbin/varnishd -j unix,user=vcache -F -a :80 -T localhost:6082 -f /etc/varnish/default.vcl -S /etc/varnish/secret -s malloc,256m

 ExecReload=/usr/share/varnish/varnishreload
 ProtectSystem=full
 ProtectHome=true
 PrivateTmp=true
 PrivateDevices=true

[Install]

 WantedBy=multi-user.target
konfigurasi Varnish cache

Simpan konfigurasi, maka varnish akan berjalan pada port 80, selanjutnya kita akan melakukan konfigurasi untuk mengarahkan varnish pada port nginx yaitu 8080.

sudo nano /etc/varnish/default.vcl

Sesuaikan port berjalan di 8080.

backend default {

        .host = "127.0.0.1";

        .port = "8080"; 

        }

Perhatikan pada .port -nya dan pastikan mengarah ke 8080 kalau tidak mengarah ke 8080 Anda bisa merubahnya disini.

port server varnish

Semua konfigurasi telah selesai dilakukan, langkah selanjutnya adalah melakukan restart dan enable pada service varnish.

sudo systemctl daemon-reload 
systemctl enable varnish
sudo service varnish restart

Selanjutnya lakukan pengecekan pada service dan port yang berjalan dengan menggunakan ss -tlnf inet.

port server vps

Pengujian Varnish

Untuk melakukan pengujian Varnish dapat menggunakan curl atau menggunakan loadtester sebagai ujicoba beban.

curl -I domain.com

atau jika hanya IP VPS

curl -I 203.175.8.223

Maka akan tampil output varnish sebagai berikut, membuktikan bahwa varnish telah berjalan melalui port 80 dan meneruskan premintaan ke backend.

hasil pengujian varnish curl

Pengujian Varnish Loadtester

Pada pengujian kali ini akan menggunakan berbagai software Benchmark seperti apache jmeter, k6, loadtest, loadrunner.

Note : Pengujian dilakukan dengan Vps Ram 2 GB

Hasil uji benchmark menunjukkan sebuah VPS KVM dengan 2GB RAM, 1 vCPU, 40GB SSD dapat menangani trafik 2400 – 3100 user dalam 1 menit dengan mudah dan ringan, tanpa error tanpa timeout.

hasil pengujian varnish cache loadtester

Sampai tahap ini, konfigurasi Varnish di Nginx telah selesai.

Demikian artikel kami tentang apa itu varnish cache dan cara konfigurasi varnish di Nginx, semoga bermanfaat.

Bermanfaatkah Artikel Ini?

Klik bintang 5 untuk rating!

Rating rata-rata 5 / 5. Vote count: 3

Belum ada vote hingga saat ini!

Kami mohon maaf artikel ini kurang berguna untuk Anda!

Mari kita perbaiki artikel ini!

Beri tahu kami bagaimana kami dapat meningkatkan artikel ini?

SSL Murah

Andika Dwi Setyawan

Dika is a System Administrator, passionate about Linux, Networking, Cyber security and much love with Arista.