Set up Default Backend pada Traefik Docker
Traefik merupakan tools yang didesain untuk menjadi reverse proxy. Kita dapat mengeset berbagai macam domain pada traefik, dan kemudian mengarahkan domain tersebut ke backend yang kita inginkan. Salah satu kelebihan dari traefik ini adalah dia dapat melakukan request SSL letsencrypt secara otomatis sesuai dengan domain yang sudah kita set ke traefik tersebut. Namun kali ini kita tidak akan membahas hal tersebut.
Pada saat kita memasang sebuah reverse proxy, ada saatnya kita memerlukan routing untuk default server, dimana ketika ada domain random yang mengarah ke reverse proxy ini, maka request akan diarahkan ke suatu backend tertentu, misal custom page untuk response 404, 500, atau response response yang lain. Sampai artikel ini ditulis, penulis tidak menemukan dokumentasi eksplisit mengenai default server tersebut di website dokumentasi official traefik.
Setelah melakukan googling lumayan lama, penulis menemukan laman berbahasa inggris terkait permasalahan default server ini. Yang perlu dilakukan saat kita menggunakan fitur default server traefik pada docker adalah menambahkan label berikut pada blok service di docker compose.
service: nama-service: labels: - "traefik.frontend.rule=HostRegexp:{catchall:.*}" - "traefik.frontend.priority=1"
Label traefik tersebut menggunakan fitur bernama regex (referensi dan simulasi beberapa format regex bisa dipelajari di sini ). Label frontend rule tersebut menggunakan regex {catchall:.*} dengan format {name:<regex>}. Kita dapat mengganti catchall dengan nama lain. Regex tersebut akan “menangkap” semua domain/subdomain yang tidak match dengan domain/subdomain yang kita tentukan secara eksplisit pada traefik. Selain itu, label priority juga berperan penting. Priority 1 berarti rule ini memiliki prioritas yang paling rendah. Traefik hanya akan match dengan rule ini ketika suatu domain sudah tidak match dengan semua rule lain. Perilaku seperti ini akan serupa dengan settingan server name default pada nginx dan apache.
Jika anda menemukan bahwa postingan ini bermanfaat bagi anda, ataupun jika memiliki pertanyaan lebih lanjut, silahkan tuliskan di kolom komentar 😀