Episode ini membahas middleware pengubah path dan URL Traefik: AddPrefix dan StripPrefix untuk menambah atau menghapus prefiks, ReplacePath dan ReplacePathRegex untuk penggantian path, RedirectScheme untuk memaksa HTTPS, serta RedirectRegex untuk pengalihan berbasis pola regex.

Tidak selalu URL publik harus sama persis dengan path internal aplikasi. Kadang backend mengharapkan request di /api/v1, sementara pengguna datang ke /api. Kadang aplikasi di-deploy di sub-path, atau pengalihan HTTP ke HTTPS harus dilakukan sekali untuk semua layanan. Episode 11 membahas middleware yang menyelesaikan semua persoalan ini: path dan request middlewares.
Enam middleware yang kita bedah — AddPrefix, StripPrefix, ReplacePath, ReplacePathRegex, RedirectScheme, RedirectRegex — adalah alat sehari-hari untuk menyesuaikan jalur request. Setelah episode ini, kalian bisa merancang konfigurasi yang menyatukan URL publik dengan arsitektur internal tanpa mengubah kode aplikasi.
AddPrefix menempelkan prefiks di depan path request sebelum diteruskan ke backend. Berguna saat backend mengharapkan path dengan awalan tertentu padahal pengguna datang tanpa awalan. Middleware addPrefix didefinisikan seperti ini:
http:
middlewares:
add-v1:
addPrefix:
prefix: "/v1"Router yang memakai middleware ini meneruskan request /users menjadi /v1/users di sisi backend. Ini menyerupai setup di mana satu backend menampung banyak versi API.
StripPrefix melakukan kebalikannya: menghapus satu atau lebih prefiks dari path. Pola klasiknya adalah reverse proxy menuju aplikasi yang di-deploy di sub-path:
http:
middlewares:
strip-docs:
stripPrefix:
prefixes:
- /docs
forceSlash: falseJika pengguna mengakses /docs/installation, backend hanya menerima /installation. Daftar prefixes memungkinkan beberapa awalan sekaligus. Opsi forceSlash: true memastikan hasil tetap diawali garis miring bahkan jika hasilnya kosong. Contoh penerapan di labels Docker:
services:
docs:
image: nginx:alpine
labels:
- traefik.enable=true
- traefik.http.routers.docs.rule=Host(`docs.localhost`) && PathPrefix(`/docs`)
- traefik.http.routers.docs.middlewares=strip-docs
- traefik.http.middlewares.strip-docs.stripprefix.prefixes=/docs
- traefik.http.routers.docs.service=docs-svc
- traefik.http.services.docs-svc.loadbalancer.server.port=80ReplacePath mengganti seluruh path dengan satu nilai tetap. Contoh: backend lama hanya mengenali path /callback untuk segala sesuatu:
http:
middlewares:
fix-path:
replacePath:
path: "/callback"Setiap request dengan path apa pun akan diteruskan sebagai /callback. Middleware ini serba guna tapi kasar — gunakan hanya jika benar-benar perlu.
ReplacePathRegex jauh lebih presisi: mengganti sebagian path berdasarkan pola regex dan template:
http:
middlewares:
versioned:
replacePathRegex:
regex: "^/api/(v[0-9]+)/users/(.*)"
replacement: "/${1}/internal/${2}"Request /api/v2/users/42 menjadi /v2/internal/42. Group capture seperti ${1} dan ${2} merujuk ke bagian yang ditangkap pola regex. Middleware ini adalah pilihan tepat untuk migrasi URL bertahap di mana dua bentuk path harus hidup berdampingan.
RedirectScheme adalah cara termudah memaksa semua trafik ke HTTPS. Ia mengembalikan redirect 301 ke URL yang sama persis dengan skema baru:
http:
middlewares:
https-redirect:
redirectScheme:
scheme: https
permanent: true
port: "443"Tempelkan middleware ini pada router di entrypoint web (HTTP), sementara router sebenarnya di entrypoint websecure (HTTPS):
http:
routers:
app-redirect:
rule: "Host(`app.example.com`)"
entrypoints:
- web
middlewares:
- https-redirect
service: dummyDengan pola ini, browser yang mengunjungi http://app.example.com langsung dialihkan ke https://app.example.com sebelum request sampai ke aplikasi. Ini mencegah aplikasi melihat trafik plaintext sama sekali.
RedirectRegex memindahkan pengguna dari satu pola URL ke pola lain dengan status code yang bisa diatur:
http:
middlewares:
old-domain:
redirectRegex:
regex: "^https://old.example.com/(.*)"
replacement: "https://new.example.com/${1}"
permanent: trueRequest https://old.example.com/blog/hello dialihkan permanen ke https://new.example.com/blog/hello. Opsi permanent: true memakai status 301; nilai false memakai 302 untuk redirect sementara. Pola ini sangat umum dipakai saat migrasi domain atau restrukturisasi path publik.
Warning
Hati-hati dengan redirect dan strip yang bertumpuk. Jika RedirectScheme mengubah skema lalu RedirectRegex mengubah host dalam rantai yang sama, urutan middleware sangat menentukan URL akhir. Uji setiap kombinasi dengan curl -I untuk melihat status dan header Location.
Inti yang harus dibawa pulang:
301.curl -I.Di episode 12 selanjutnya kita akan membahas rate limiting & circuit breaker — middleware RateLimit dengan average dan burst, InFlightReq untuk membatasi request konkuren, CircuitBreaker berbasis ekspresi error ratio, serta middleware Retry untuk percobaan ulang otomatis. Di sinilah kalian mulai melindungi backend dari lonjakan trafik.