Belajar Traefik - Routers & Rules
Episode 6 of 31

Belajar Traefik - Routers & Rules

Episode ini memperdalam router dan rule Traefik: sintaks rule, semua matcher seperti Host, HostRegexp, Path, PathPrefix, Method, Headers, dan Query, operator logika AND, OR, dan NOT, contoh rule kompleks, serta aturan priority otomatis dan manual untuk menyelesaikan konflik routing.

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

Pendahuluan

Router adalah unit pengambilan keputusan Traefik, dan rule adalah bahasanya. Episode 6 mengajarkan kalian berbicara bahasa itu dengan fasih: semua matcher yang tersedia, cara menggabungkannya dengan operator logika, serta bagaimana Traefik memutuskan router mana yang menang ketika beberapa rule saling tumpang tindih.

Penguasaan rule adalah keterampilan yang paling sering membedakan konfigurasi Traefik yang rapuh dari yang kokoh. Banyak insiden produksi dimulai dari rule yang terlalu longgar atau priority yang salah. Mari kita bangun fondasi yang benar sejak awal.

Sintaks Router dan Rule

Bagian-bagian Sebuah Router

Router terdiri dari nama, rule, entrypoint yang dilayani, service tujuan, dan middleware opsional. Sintaksnya konsisten baik lewat labels Docker maupun file provider:

Anatomi router via labels
services:
  web:
    image: nginx:alpine
    labels:
      - traefik.enable=true
      - traefik.http.routers.web.rule=Host(`web.localhost`)
      - traefik.http.routers.web.entrypoints=web
      - traefik.http.routers.web.service=web-svc
      - traefik.http.routers.web.middlewares=compress
      - traefik.http.services.web-svc.loadbalancer.server.port=80

Semua bagian router dapat diidentifikasi dari traefik.http.routers.web.*. Versi file provider akan tampak identik dengan struktur YAML yang lebih eksplisit — kita akan melihatnya di episode 19.

Semua Matcher Rule

Host dan HostRegexp

  • Host(app.example.com): mencocokkan nama host persis.
  • Host(example.com, www.example.com): menerima beberapa host dalam satu rule.
  • HostRegexp: mencocokkan host dengan pola regex, contoh HostRegexp({subdomain:[a-z]+}.example.com) — bentuk {nama:pola} adalah named capture.

Path dan PathPrefix

  • Path(/api): cocok hanya untuk path persis /api.
  • Path(/api, /v2/api): menerima daftar path.
  • PathPrefix(/api): cocok untuk /api, /api/users, dan seterusnya — paling sering dipakai.

Method, Headers, dan Query

  • Method(GET, POST): membatasi method HTTP.
  • Headers(X-Token, abc123): mencocokkan nilai header spesifik.
  • Query(page, 1): mencocokkan query parameter spesifik.

Semua matcher ini bisa dipakai dalam satu rule dengan operator logika. Traefik mengevaluasi rule dengan matcher yang benar-benar memetakan ke permintaan nyata — kecepatan evaluasi praktis tidak terasa perbedaannya.

Operator Logika

Menggabungkan dan Meniadakan

Traefik mendukung tiga operator:

  • && untuk AND: semua kondisi harus terpenuhi.
  • || untuk OR: salah satu kondisi cukup.
  • ! untuk NOT: membalik hasil kondisi.
  • Tanda kurung () untuk mengelompokkan prioritas evaluasi.

Contoh penggunaan operator yang benar dan salah:

Contoh operator rule
Host(`api.localhost`) && PathPrefix(`/v1`)
Host(`a.localhost`) || Host(`b.localhost`)
Host(`admin.localhost`) && !PathPrefix(`/public`)
(Host(`api.localhost`) && PathPrefix(`/v1`)) || Path(`/ping`)

Perhatikan operator ditulis di antara matcher, bukan di dalam matcher. Sintaks di dalam backtick matcher tidak menerima operator — misalnya Host(a.localhost || b.localhost) adalah salah. Matcher Host yang ingin menerima beberapa domain menuliskannya dengan koma, bukan operator OR.

Contoh Rule untuk Skenario Nyata

Beberapa Kombinasi Umum

Berikut pola yang sering dipakai di lapangan:

Rule kompleks: multi-domain dan header
services:
  app:
    image: myapp:latest
    labels:
      - traefik.enable=true
      - traefik.http.routers.app.rule=(Host(`app.example.com`) || Host(`app.internal`)) && PathPrefix(`/`)
      - traefik.http.routers.app.entrypoints=web
      - traefik.http.routers.app.service=app-svc
      - traefik.http.services.app-svc.loadbalancer.server.port=8080
 
  admin:
    image: myadmin:latest
    labels:
      - traefik.enable=true
      - traefik.http.routers.admin.rule=Host(`admin.example.com`) && Headers(`X-Admin`, `true`)
      - traefik.http.routers.admin.entrypoints=web
      - traefik.http.routers.admin.service=admin-svc
      - traefik.http.services.admin-svc.loadbalancer.server.port=9000

Router app melayani dua domain sekaligus, sedangkan router admin hanya aktif jika host benar dan header X-Admin bernilai true. Kombinasi semacam ini memungkinkan layanan yang sama dirutekan secara berbeda untuk segmen pengguna yang berbeda.

Priority Router

Automatic dan Manual

Ketika dua router memiliki rule yang sama-sama cocok, Traefik memilih berdasarkan priority. Secara otomatis, priority dihitung dari jumlah karakter pada rule: rule yang lebih spesifik (lebih panjang) menang. Contoh: PathPrefix(/api/v2) otomatis menang atas PathPrefix(/api).

Namun kadang penghitungan otomatis tidak sesuai harapan. Kalian bisa menimpa dengan label priority — di bawah ini kita set label traefik.http.routers.special.priority menjadi nilai manual:

Mengatur priority manual
labels:
  - traefik.enable=true
  - traefik.http.routers.special.rule=PathPrefix(`/api/v2`)
  - traefik.http.routers.special.priority=100
  - traefik.http.routers.special.service=special-svc
  - traefik.http.services.special-svc.loadbalancer.server.port=3000

Rule di atas menang atas router /api lainnya berapa pun panjang rule-nya, selama keduanya cocok. Prioritas manual adalah cara paling jelas mengontrol konflik — gunakan dengan konsisten agar tidak membingungkan tim.

Tip

Saat dua router cocok dan punya priority sama, Traefik memilih berdasarkan urutan abjad nama router. Jangan pernah bergantung pada perilaku ini — selalu atur priority secara eksplisit untuk rute yang saling tumpang tindih.

Penutup

Inti yang harus dibawa pulang:

  • Router punya lima bagian: nama, rule, entrypoints, service, middlewares.
  • Matcher inti: Host, HostRegexp, Path, PathPrefix, Method, Headers, Query.
  • Operator &&, ||, !, dan tanda kurung menggabungkan beberapa kondisi.
  • Operator ditulis di luar backtick matcher, bukan di dalamnya.
  • Priority otomatis berdasarkan panjang rule; bisa ditimpa dengan priority.
  • Untuk konflik yang tumpang tindih, selalu set priority manual.

Di episode 7 selanjutnya kita akan membahas services & load balancing — tipe service HTTP, TCP, dan UDP, server definitions, weight distribution, sticky sessions, health checks, algoritma load balancing, serta service mirroring untuk traffic shadowing dan canary.

Belajar Traefik - Routers & Rules | Belajar Traefik