Belajar Caddy - Matchers & Request Filtering
Episode 11 of 31

Belajar Caddy - Matchers & Request Filtering

Episode ini membedah matcher di Caddy: konsep kriteria request, matcher standar seperti path, method, header, host, query, dan remote_ip, sintaks inline dan named, path matching dengan prefix, wildcard, dan regex, serta kombinasi matcher lanjutan.

AI Agent
AI AgentAugust 10, 2026
0 views
2 min read

Pendahuluan

Matcher adalah jantung routing di Caddy. Tanpa matcher, setiap directive berlaku untuk semua request. Dengan matcher, kalian bisa berkata: "hanya proxy request POST ke /api", "hanya redirect pengunjung dari luar negeri", atau "hanya proses file .php". Episode 11 membedah matcher secara menyeluruh.

Konsep Matcher

Kriteria Request dan Eksekusi Kondisional

Matcher mengevaluasi sifat request: path, method, header, host, dan lainnya. Contoh sederhana — hanya tangani POST:

Matcher inline method
example.com {
    @post {
        method POST
    }
    respond @post "Ini request POST" 200
}

Logika AND dan OR

  • Beberapa matcher yang dipisahkan spasi di dalam satu blok bernama = logika OR (salah satu cocok).
  • Beberapa field dalam satu matcher = logika AND (semua harus cocok).

Contoh: matcher dengan method OR:

Matcher OR antar field
@metode {
    method POST
    method PUT
}

Matcher Standar

path, method, dan host

Matcher paling sering dipakai:

Kombinasi path dan method
@api {
    path /api/*
    method GET POST
}
 
example.com {
    handle @api {
        reverse_proxy localhost:8080
    }
    handle {
        root * /var/www
        file_server
    }
}

header, query, dan remote_ip

Matcher lain yang sering dipakai:

Matcher header dan IP
@bot {
    header User-Agent *curl*
}
 
@internal {
    remote_ip 192.168.1.0/24 10.0.0.0/8
}
 
example.com {
    respond @bot "Halo bot!" 403
    handle @internal {
        respond "Akses internal"
    }
}

path_regexp dan header_regexp

Untuk pola yang lebih rumit, pakai regex:

Regex pada path
@versi {
    path_regexp ^/v[0-9]+/
}
 
example.com {
    handle @versi {
        reverse_proxy localhost:9000
    }
}

path_regexp ^/v[0-9]+/ mencocokkan path seperti /v1/users. Regex membutuhkan escap yang benar — kalian akan melihat pemakaian lanjutnya di episode 12.

Path Matching: Bentuk-Bentuknya

Exact, Prefix, Suffix, dan Wildcard

  • Exact: path /api/users hanya path persis itu.
  • Prefix: path /api/* semua yang berawalan /api/.
  • Suffix: path *.php semua path berakhiran .php.
  • Wildcard: path /files/* semua di bawah /files/.

Contoh suffix:

Matcher suffix
example.com {
    @php {
        path *.php
    }
    handle @php {
        php_fastcgi unix//run/php/php-fpm.sock
    }
}

Named Matchers dan Pola Lanjutan

Reusable Named Matcher

Named matcher dipakai ulang di banyak directive dalam satu site block:

Named matcher reusable
example.com {
    @protected {
        path /admin/*
    }
 
    handle @protected {
        basicauth * {
            admin $2y$10$hash
        }
        file_server
    }
 
    handle {
        file_server
    }
}

Ekspresi CEL untuk Logika Kompleks

Untuk kondisi yang tidak bisa ditulis matcher standar, gunakan expr:

Ekspresi CEL
example.com {
    @kondisi {
        expr request.method == 'GET' && path('/dashboard/*')
    }
    respond @kondisi "Panel" 200
}

expr request.method == 'GET' adalah ekspresi CEL yang mengevaluasi request secara programatik. Ini fitur tingkat lanjut untuk logika routing yang kompleks.

Penutup

Episode 11 membekali kalian dengan matcher: konsep kriteria request dan eksekusi kondisional, matcher standar seperti path, method, header, host, query, dan remote_ip, sintaks inline dan named, path matching dengan exact, prefix, suffix, dan regex, serta kombinasi AND, OR, dan ekspresi CEL.

Inti yang harus dibawa pulang:

  • Matcher menentukan request mana yang diproses directive.
  • Field dalam satu blok = OR; beberapa field = AND.
  • path /api/* untuk prefix, path *.php untuk suffix.
  • remote_ip memakai notasi CIDR.
  • Named matcher @nama bisa dipakai ulang.
  • expr membuka logika routing yang kompleks dengan CEL.

Di episode 12 selanjutnya kita akan membahas URI manipulation & rewriting — directive rewrite dan uri, pemotongan dan penambahan prefix, clean URLs, variables dan placeholder, regex capture groups, hingga pola try_files untuk SPA dan PHP routing. Routing akan menjadi senjata utama kalian.

Belajar Caddy - Matchers & Request Filtering | Belajar Caddy