Mam następującą konfigurację:
|-------|--- backend1:8080
example.com:80---|HAProxy|--- backend2:8080
|-------|--- backend3:8080
Chciałbym skonfigurować HAProxy, aby dodać niestandardowy nagłówek zawierający oryginalny adres URL. Na przykład, jeśli użytkownik zażąda http://example.com/foo?bar=baz
, tj .:
GET /foo?bar=baz HTTP/1.1
Host: example.com:80
Chciałbym, aby HAProxy przetłumaczył tę prośbę na backend w następujący sposób:
GET /foo?bar=baz HTTP/1.1
Host: backend1:8080
x-custom-header: http://example.com/foo?bar=baz
Ta reqadd
opcja pozwala mi tylko dodać nagłówek o wartości statycznej. Udało mi się pobrać część ścieżki z żądania za pomocą reqrep
:
reqrep ^([^\ ]*)\ ([^\ ]*)\ (HTTP\/1\.[10]) \0\r\nx-custom-header:\ \2
ale niestety przechwytuje to tylko część ścieżki oryginalnego adresu URL, co powoduje następujący nagłówek:
x-custom-header: /foo?bar=baz
Moje pytanie brzmi więc, czy w HAProxy 1.4 można połączyć Host
nagłówek i pierwszą linię żądania HTTP w niestandardowy nagłówek
reqadd
z acl, który odwołuje się dobe_id
(backend-id)? Nie jest to dokładnie dynamiczne, ale może cię przybliżyć, jeśli liczba backendów jest niewielka ...reqirep
obsługuje również opcjonalny acl, więc możesz napisać osobne wyrażenia regularne dla każdego backendu, każdy aktywny tylko, jeśli acl pasuje do wybranego backendu ID.