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


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]

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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.