Episode ini mendalami penanganan HTTP di layer 7: routing berbasis path dan host, matching berdasarkan header, manipulasi header request dan response, redirect, serta persistence memakai cookie untuk menjaga session affinity.

Di episode 4 kalian sudah melihat ACL dan use_backend. Episode 6 membawa penanganan HTTP ke level berikutnya: routing yang lebih cerdas berbasis path, host, dan header, manipulasi header di kedua arah, redirect, serta session affinity memakai cookie.
Semua kemampuan ini yang membuat HAProxy pantas disebut API gateway dan application delivery controller, bukan sekadar penerus paket. Konfigurasi di episode ini akan jadi bekal utama untuk episode 11 dan 16.
Routing berbasis path memisahkan trafik berdasarkan bagian URL:
frontend web_front
bind *:80
mode http
acl is_api path_beg /api
acl is_admin path_beg /admin
acl is_static path_end .png .jpg .css .js
use_backend api_back if is_api
use_backend admin_back if is_admin
use_backend static_back if is_static
default_backend web_backBaris acl is_api path_beg /api membuat kondisi benar jika path dimulai /api. Pola yang dipakai: path_beg untuk awalan, path_end untuk akhiran, dan path_reg untuk regex.
Host-based routing memisahkan trafik berdasarkan nama domain, pola dasar virtual hosting:
frontend web_front
bind *:80
mode http
acl host_app1 hdr(host) -i app1.example.com
acl host_app2 hdr(host) -i app2.example.com
use_backend app1_back if host_app1
use_backend app2_back if host_app2
default_backend web_backDirektif acl host_app1 hdr(host) -i app1.example.com mencocokkan header Host secara case-insensitive berkat opsi -i.
Selain Host, header lain bisa dipakai sebagai dasar keputusan:
frontend web_front
bind *:80
mode http
acl is_mobile hdr(user-agent) -i android iphone
acl is_internal hdr(x-internal) -m str yes
use_backend mobile_back if is_mobile
use_backend internal_back if is_internal
default_backend web_backacl is_mobile hdr(user-agent) -i android iphone bernilai benar jika User-Agent mengandung kata android atau iphone. Header kustom seperti X-Internal bisa dipakai untuk trafik antar layanan internal.
Sering kali backend butuh informasi dari klien yang hanya HAProxy yang tahu. Header dimodifikasi dengan http-request set-header:
frontend web_front
bind *:80
mode http
http-request set-header X-Real-IP %[src]
http-request set-header X-Forwarded-Proto http
http-request del-header X-InternalBaris http-request set-header X-Real-IP %[src] mengisi header dengan IP klien, dan http-request del-header X-Internal menghapus header yang tidak boleh masuk ke backend.
Untuk respons, http-response set-header dipakai; untuk memindahkan pengguna, http-request redirect:
frontend web_front
bind *:80
mode http
acl is_logged hdr(cookie) -m sub session_id
http-response set-header X-Powered-By none
http-request redirect location /login if !is_logged
default_backend web_backhttp-request redirect location /login if !is_logged mengirim pengguna yang belum login ke halaman login. Redirect juga umum dipakai untuk memaksa HTTPS, seperti contoh di episode 4.
Beberapa aplikasi menyimpan state di memori server. Agar session tidak hilang, HAProxy bisa menyisipkan cookie yang mengunci pengguna ke satu server:
backend web_back
balance roundrobin
cookie SERVERID insert indirect nocache
server web1 10.0.0.11:80 check cookie web1
server web2 10.0.0.12:80 check cookie web2Direktif cookie SERVERID insert indirect nocache menyuruh HAProxy menyisipkan cookie bernama SERVERID, dan server web1 10.0.0.11:80 check cookie web1 menandai nilai cookie untuk server tersebut.
Ketika klien pertama kali datang, HAProxy memilih server lalu menyisipkan cookie. Pada request berikutnya, cookie dibaca dan request selalu diarahkan ke server yang sama. Perhatikan:
option httpchk agar server yang mati tidak menerima request berlabel cookie-nya.leastconn bila sesi berumur panjang.curl -s -i http://localhost/ | grep -i set-cookiecurl -s -i http://localhost/ | grep -i set-cookie menampilkan header Set-Cookie yang disisipkan HAProxy.
Episode 6 melengkapi toolkit HTTP kalian: routing yang presisi, manipulasi header dua arah, redirect, dan session affinity. Dengan kemampuan ini, HAProxy sudah bisa menjadi otak pengarah trafik di depan microservices.
Inti yang harus dibawa pulang:
path_beg, path_end, dan path_reg untuk routing berbasis URL.hdr(host) dan hdr(user-agent) untuk routing berbasis header.http-request set-header dan http-response set-header untuk modifikasi header.http-request redirect untuk memindahkan klien.cookie SERVERID insert menjaga session affinity berbasis cookie.Di episode 7 selanjutnya kita akan membahas logging & basic monitoring — konfigurasi logging via syslog dan format log, stats socket dan halaman statistics, serta dasar membaca metrik seperti request rate, response time, dan status kesehatan server.