Bagaimana cara menambahkan tajuk khusus yang berisi alamat absolut dari sumber yang diminta semula

11

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 reqaddpilihan 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 Hostheader dan baris pertama permintaan HTTP ke header kustom

Darin Dimitrov
sumber
Sudahkah Anda mencoba menggabungkan reqadddengan acl yang mereferensikan be_id(backend-id)? Ini tidak persis dinamis tetapi mungkin membuat Anda lebih dekat jika jumlah backend kecil ... reqirepjuga 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.
Michael - sqlbot

Jawaban:

18

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:

http-request set-header X-Custom-Header %[url]
Nick Craver
sumber
1
Terima kasih telah mengonfirmasi kesimpulan saya bahwa ini tidak mungkin di 1.4. Saya sudah beralih ke nginx.
Darin Dimitrov
% [url] tidak selalu URL lengkap, tetapi tampaknya itu adalah yang terbaik yang bisa dilakukan oleh haproxy. haproxy 1.8 URL variabel docs: cbonte.github.io/haproxy-dconv/1.8/configuration.html#7.3.6-url
zie