Saya memiliki pengaturan berikut:
|-------|--- backend1:8080
example.com:80---|HAProxy|--- backend2:8080
|-------|--- backend3:8080
Saya ingin mengonfigurasi HAProxy untuk menambahkan header khusus yang berisi url asli. Misalnya jika permintaan pengguna http://example.com/foo?bar=baz
, yaitu:
GET /foo?bar=baz HTTP/1.1
Host: example.com:80
Saya ingin HAProxy menerjemahkan permintaan ini ke backend seperti:
GET /foo?bar=baz HTTP/1.1
Host: backend1:8080
x-custom-header: http://example.com/foo?bar=baz
The reqadd
pilihan hanya memungkinkan saya untuk menambahkan header dengan nilai statis. Saya bisa mendapatkan bagian jalur dari permintaan menggunakan reqrep
:
reqrep ^([^\ ]*)\ ([^\ ]*)\ (HTTP\/1\.[10]) \0\r\nx-custom-header:\ \2
tetapi sayangnya ini hanya menangkap bagian jalur dari url asli yang menghasilkan tajuk berikut:
x-custom-header: /foo?bar=baz
Jadi pertanyaan saya adalah apakah mungkin dalam HAProxy 1.4 untuk menggabungkan Host
header dan baris pertama permintaan HTTP ke header kustom
reqadd
dengan acl yang mereferensikanbe_id
(backend-id)? Ini tidak persis dinamis tetapi mungkin membuat Anda lebih dekat jika jumlah backend kecil ...reqirep
juga mendukung acl opsional, sehingga Anda dapat menulis regex terpisah untuk setiap back-end, masing-masing hanya aktif jika sebuah acl cocok dengan backend yang dipilih- Indo.Jawaban:
Jawaban singkat: tidak, Anda tidak dapat melakukan ini di HAProxy 1.4 .
Namun, bagi mereka yang menemukan pertanyaan ini di 1.5+:
Di HAProxy 1.5+ Anda dapat mereferensi variabel melalui
%[variable]
sintaks dan Anda tidak dibatasi hanya menggunakan string statis. Anda dapat melihat variabel mana yang sudah ada di bagian 7.3 dari panduan konfigurasi HAProxy (khusus 7.3.6 untuk variabel layer 7 ).Untuk kasus Anda, Anda melihat mentah
url
, seperti ini:sumber
nginx
.