OpenBSD Varnish Cache Proxy Dengan Backend NGINX
· 2 min read · Label UnixBSD
Varnish merupakan HTTP proxy cache yang dapat meningkatkan kecepatan akses situs web dari jaringan lokal Anda. Sebab, Varnish merupakan salah satu perangkat lunak yang menyediakan cache hosting situs web yang sangat cepat dibandingkan dengan layanan web standar. Namun, ada satu keterbatasan utama yaitu tidak akan menyajikan konten HTTPS.
Varnish merupakan server reverse proxy yang sangat andal, kemampuannya dapat bekerja di depan server web Anda dan menyajikan konten dari server Anda, bukan server orang lain atau server web jarak jauh. Server reverse proxy terhubung erat dengan server web dan dapat bertindak atas pesan yang diterima darinya. Misalnya, halaman yang di-cache dapat di-refresh dengan perintah purge dari backend, sesuatu yang tidak dapat Anda lakukan dengan cache yang lebih dekat ke klien. Ini berarti server reverse proxy, dalam beberapa kasus, dapat menyimpan konten lebih lama daripada jenis cache lainnya.
Dalam tutorial ini, saya akan menunjukkan cara menginstal Varnish pada server OpenBSD 7.5 dengan NGINX sebagai backend.
OS: OpenBSD 7.5
Hostname: ns3
Domain: kursor.my.id
IP adrress: 192.168.5.3
Nginx version: nginx-1.24.0p0
Port Nginx: 8080
Varnish version: varnish-7.4.2
Port Varnis: 80
Setelah itu, buka file /etc/nginx/nginx.conf dan ketik skrip berikut di dalam file tersebut.
Kemudian buat file "index.html" untuk memeriksa server NGINX. File "index.html" terletak di direktori /var/www/htdocs. Di file "index.html", ketik skrip berikut.
Then, you run the command below.
Secara default OpenBSD menonaktifkan NGINX, untuk menjalankan NGINX, Anda harus mengaktifkan server NGINX terlebih dahulu. Jalankan perintah berikut untuk mengaktifkan NGINX.
Setelah itu, tambahkan skrip lain di file /etc/rc.conf.local, dengan perintah rcctl seperti pada contoh di bawah ini.
Langkah terakhir adalah menjalankan Varnish dengan perintah rcctl.
Varnish merupakan server reverse proxy yang sangat andal, kemampuannya dapat bekerja di depan server web Anda dan menyajikan konten dari server Anda, bukan server orang lain atau server web jarak jauh. Server reverse proxy terhubung erat dengan server web dan dapat bertindak atas pesan yang diterima darinya. Misalnya, halaman yang di-cache dapat di-refresh dengan perintah purge dari backend, sesuatu yang tidak dapat Anda lakukan dengan cache yang lebih dekat ke klien. Ini berarti server reverse proxy, dalam beberapa kasus, dapat menyimpan konten lebih lama daripada jenis cache lainnya.
Dalam tutorial ini, saya akan menunjukkan cara menginstal Varnish pada server OpenBSD 7.5 dengan NGINX sebagai backend.
Spesifikasi sistem
Pastikan komputer server Anda memiliki sistem operasi dan perangkat lunak berikut yang terpasang.OS: OpenBSD 7.5
Hostname: ns3
Domain: kursor.my.id
IP adrress: 192.168.5.3
Nginx version: nginx-1.24.0p0
Port Nginx: 8080
Varnish version: varnish-7.4.2
Port Varnis: 80
1. Konfigurasi NGINX
Karena kita akan menggunakan NGINX sebagai backend Varnish, menginstal NGINX adalah langkah pertama yang harus Anda lakukan. Berikut ini adalah perintah yang harus Anda ketik untuk menginstal NGINX.Install Nginx
ns3# pkg_add nginx
Script /etc/nginx/nginx.conf
user www;
worker_processes 1;
worker_rlimit_nofile 1024;
events {
worker_connections 800;
}
http {
include mime.types;
default_type application/octet-stream;
index index.html index.htm;
keepalive_timeout 65;
server_tokens off;
server {
listen 8080;
listen [::]:80;
server_name localhost;
root /var/www/htdocs;
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /var/www/htdocs;
}
}
}
Script /var/www/htdocs/index.html
<html>
<head>
<title>Nginx port 8080</title>
</head>
<body>
<h1>
<p align="center">Welcome to Nginx port HTTP</p>
<p align="center">With Varnis Cache Proxy</p>
</h1>
</body>
</html>
Create ownership and permissions
ns3# chown -R www:www /var/www/htdocs/
ns3# chmod -R 775 /var/www/htdocs/
Activate NGINX
ns3# rcctl enable nginx
ns3# rcctl restart nginx
2. Cara Instal Varnish
Varnish mengambil konten dari server backend Apache atau NGINX, yang merupakan server web tempat konten Anda dibuat. Dalam artikel ini, kita akan menggunakan server web NGINX sebagai backend Varnish. Menginstal Varnish sangat mudah, karena OpenBSD telah menyediakan paket Varnish, Anda dapat langsung menginstal dan mengaktifkan Varnish hanya dengan beberapa perintah. Untuk menginstal Varnish, Anda dapat menjalankan perintah berikut.Install Varnish
ns3# pkg_add varnish
Enable Varnish
ns3# rcctl enable varnishd
3. Konfigurasi Varnish di OpenBSD
Secara default file konfigurasi dasar Varnish dapat berjalan normal, tetapi file konfigurasi tersebut tidak dapat berjalan jika Anda tidak mengatur flag untuk daemon tersebut. Dalam OpenBSD, pengaturan flag sangatlah penting, karena flag ini akan mengatur semua konfigurasi Varnish. Pada bagian ini kami akan menjelaskan cara mengatur flag untuk Varnish. Hal pertama yang harus Anda lakukan adalah menambahkan skrip ke file /etc/rc.conf, seperti contoh berikut./etc/rc.conf
varnishd_flags=
/etc/rc.conf.local dengan rcctl
ns3# rcctl set varnishd flags "-a http=192.168.5.3:80,HTTP -a proxy=192.168.5.3:6081,PROXY -j unix,user=_varnish,ccgroup=_varnish -f /etc/varnish/default.vcl -T localhost:9999 -p feature=+http2"Untuk mengonfigurasi Varnish, Anda harus mengubah berkas /etc/varnish/default.vcl. Secara default, berkas default.vcl hanya mengaktifkan backend. Berikut ini adalah contoh skrip lengkap untuk berkas /etc/varnish/default.vcl.
Script /etc/varnish/default.vcl
vcl 4.1;
backend default {
.host = "192.168.5.3";
.port = "8080";
}
sub vcl_recv {
call vcl_builtin_recv;
return (hash);
}
sub vcl_builtin_recv {
call vcl_req_host;
call vcl_req_method;
call vcl_req_authorization;
call vcl_req_cookie;
}
sub vcl_req_host {
if (req.http.host ~ "[[:upper:]]") {
set req.http.host = req.http.host.lower();
}
if (!req.http.host &&
req.esi_level == 0 &&
req.proto == "HTTP/2") {
return (synth(400));
}
}
sub vcl_req_method {
if (req.method == "PRI") {
# This will never happen in properly formed traffic.
return (synth(405));
}
if (req.method != "GET" &&
req.method != "HEAD" &&
req.method != "PUT" &&
req.method != "POST" &&
req.method != "TRACE" &&
req.method != "OPTIONS" &&
req.method != "DELETE" &&
req.method != "PATCH") {
# Non-RFC2616 or CONNECT which is weird.
return (pipe);
}
if (req.method != "GET" && req.method != "HEAD") {
# We only deal with GET and HEAD by default.
return (pass);
}
}
sub vcl_req_authorization {
if (req.http.Authorization) {
# Not cacheable by default.
return (pass);
}
}
sub vcl_req_cookie {
if (req.http.Cookie) {
# Risky to cache by default.
return (pass);
}
}
sub vcl_pipe {
call vcl_builtin_pipe;
# unset bereq.http.connection;
return (pipe);
}
sub vcl_builtin_pipe {
}
sub vcl_pass {
call vcl_builtin_pass;
return (fetch);
}
sub vcl_builtin_pass {
}
sub vcl_hash {
call vcl_builtin_hash;
return (lookup);
}
sub vcl_builtin_hash {
hash_data(req.url);
if (req.http.host) {
hash_data(req.http.host);
} else {
hash_data(server.ip);
}
}
sub vcl_purge {
call vcl_builtin_purge;
return (synth(200, "Purged"));
}
sub vcl_builtin_purge {
}
sub vcl_hit {
call vcl_builtin_hit;
return (deliver);
}
sub vcl_builtin_hit {
}
sub vcl_miss {
call vcl_builtin_miss;
return (fetch);
}
sub vcl_builtin_miss {
}
sub vcl_deliver {
call vcl_builtin_deliver;
return (deliver);
}
sub vcl_builtin_deliver {
}
sub vcl_synth {
call vcl_builtin_synth;
return (deliver);
}
sub vcl_builtin_synth {
set resp.http.Content-Type = "text/html; charset=utf-8";
set resp.http.Retry-After = "5";
set resp.body = {"<!DOCTYPE html>
<html>
<head>
<title>"} + resp.status + " " + resp.reason + {"</title>
</head>
<body>
<h1>Error "} + resp.status + " " + resp.reason + {"</h1>
<p>"} + resp.reason + {"</p>
<h3>Guru Meditation:</h3>
<p>XID: "} + req.xid + {"</p>
<hr>
<p>Varnish cache server</p>
</body>
</html>
"};
}
sub vcl_backend_fetch {
call vcl_builtin_backend_fetch;
return (fetch);
}
sub vcl_builtin_backend_fetch {
if (bereq.method == "GET") {
unset bereq.body;
}
}
sub vcl_backend_response {
call vcl_builtin_backend_response;
return (deliver);
}
sub vcl_builtin_backend_response {
if (bereq.uncacheable) {
return (deliver);
}
call vcl_beresp_stale;
call vcl_beresp_cookie;
call vcl_beresp_control;
call vcl_beresp_vary;
}
sub vcl_beresp_stale {
if (beresp.ttl <= 0s) {
call vcl_beresp_hitmiss;
}
}
sub vcl_beresp_cookie {
if (beresp.http.Set-Cookie) {
call vcl_beresp_hitmiss;
}
}
sub vcl_beresp_control {
if (beresp.http.Surrogate-control ~ "(?i)no-store" ||
(!beresp.http.Surrogate-Control &&
beresp.http.Cache-Control ~ "(?i:no-cache|no-store|private)")) {
call vcl_beresp_hitmiss;
}
}
sub vcl_beresp_vary {
if (beresp.http.Vary == "*") {
call vcl_beresp_hitmiss;
}
}
sub vcl_beresp_hitmiss {
set beresp.ttl = 120s;
set beresp.uncacheable = true;
return (deliver);
}
sub vcl_backend_error {
call vcl_builtin_backend_error;
return (deliver);
}
sub vcl_builtin_backend_error {
set beresp.http.Content-Type = "text/html; charset=utf-8";
set beresp.http.Retry-After = "5";
set beresp.body = {"<!DOCTYPE html>
<html>
<head>
<title>"} + beresp.status + " " + beresp.reason + {"</title>
</head>
<body>
<h1>Error "} + beresp.status + " " + beresp.reason + {"</h1>
<p>"} + beresp.reason + {"</p>
<h3>Guru Meditation:</h3>
<p>XID: "} + bereq.xid + {"</p>
<hr>
<p>Varnish cache server</p>
</body>
</html>
"};
}
sub vcl_init {
return (ok);
}
sub vcl_fini {
return (ok);
}
Jalankan Varnis
ns3# rcctl restart varnishd
varnishd(ok)
varnishd(ok)
4. Test dengan Web Browser
Untuk lebih meyakinkan apakah varnis telah bekerja sebagai cache proxy dari Nginx, kita harus melakukan pengetesam untuk membuktikannya. Pengetesan ini bisa anda lakukan di web browser Gogole Chrome, Yandex ataupun lainnya.Pada menu address bar Google Chrome anda ketikkan alamat IP varnis, yaitu "http://192.168.5.3:8080/". Hasilnya akan terlihat di layar monitor anda seperti gambar berikut ini.
![]() |
Jika konfigurasi tak ada yang salah, tulisan "Welcome to Nginx port HTTP With Varnis Cache Proxy" akan muncul di halaman Google Chrome |
Selamat, Anda telah berhasil memasang Varnish di OpenBSD dan kini Anda memiliki pengaturan sederhana untuk meningkatkan kecepatan situs Anda. Dalam artikel ini, Anda telah mempelajari dasar-dasar Varnish, proses pemasangan dan konfigurasi Varnish, apa itu Varnish, dan apa saja pengaturan default yang akan disediakan. Kami juga membahas sekilas tentang VCL, bahasa konfigurasi Varnish.
VCL mungkin agak sulit dipahami, terutama karena ini merupakan cara yang tidak biasa untuk melakukan konfigurasi, pada kenyataannya VCL sangat mudah digunakan setelah Anda membaca artikel ini, dan juga lebih fleksibel daripada file konfigurasi. Jika Anda ingin terus mempelajari Varnish, kunjungi varnish-cache.org untuk informasi lebih lanjut.
Silahkan Berkomentar, Kakak...! Bunda...!
Posting Komentar