Come aggiungere un'intestazione personalizzata contenente l'indirizzo assoluto della risorsa richiesta originariamente


11

Ho la seguente configurazione:

                 |-------|--- backend1:8080
example.com:80---|HAProxy|--- backend2:8080
                 |-------|--- backend3:8080

Vorrei configurare HAProxy per aggiungere un'intestazione personalizzata contenente l'URL originale. Ad esempio se l'utente richiede http://example.com/foo?bar=baz, ovvero:

GET /foo?bar=baz HTTP/1.1
Host: example.com:80

Vorrei che HAProxy traducesse questa richiesta nel backend in questo modo:

GET /foo?bar=baz HTTP/1.1
Host: backend1:8080
x-custom-header: http://example.com/foo?bar=baz

L' reqaddopzione mi consente solo di aggiungere un'intestazione con un valore statico. Sono stato in grado di ottenere la parte del percorso dalla richiesta utilizzando reqrep:

reqrep ^([^\ ]*)\ ([^\ ]*)\ (HTTP\/1\.[10])  \0\r\nx-custom-header:\ \2

ma sfortunatamente questo acquisisce solo la parte del percorso dell'URL originale risultante nella seguente intestazione:

x-custom-header: /foo?bar=baz

Quindi la mia domanda è se in HAProxy 1.4 è possibile combinare sia l' Hostintestazione che la prima riga della richiesta HTTP in un'intestazione personalizzata


Hai provato a combinare reqaddcon un acl che fa riferimento a be_id(backend-id)? Non è precisamente dinamico ma potrebbe avvicinarti se il numero di backend è piccolo ... reqirepsupporta anche un acl opzionale, quindi potresti scrivere regex separati per ciascun back-end, ciascuno attivo solo se un acl corrisponde al back-end selezionato- id.
Michael - sqlbot

Risposte:


18

Risposta breve: no, non puoi farlo in HAProxy 1.4 .


Tuttavia, per coloro che trovano questa domanda su 1.5+:

In HAProxy 1.5+ puoi fare riferimento alle variabili tramite la %[variable]sintassi e non sei limitato all'utilizzo solo di stringhe statiche. Puoi vedere quali variabili esistono già nella sezione 7.3 della guida alla configurazione di HAProxy (in particolare 7.3.6 per le variabili di livello 7 ).

Per il tuo caso, stai guardando raw url, in questo modo:

http-request set-header X-Custom-Header %[url]

1
Grazie per aver confermato la mia conclusione che ciò non è possibile in 1.4. Sono passato a nginx.
Darin Dimitrov,

% [url] non è sempre l'URL completo, ma sembra essere il migliore haproxy in grado di fare. haproxy 1.8 Documenti variabili URL: cbonte.github.io/haproxy-dconv/1.8/configuration.html#7.3.6-url
zie
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.