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