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' reqadd
opzione 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' Host
intestazione che la prima riga della richiesta HTTP in un'intestazione personalizzata
reqadd
con un acl che fa riferimento abe_id
(backend-id)? Non è precisamente dinamico ma potrebbe avvicinarti se il numero di backend è piccolo ...reqirep
supporta 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.