다음과 같은 설정이 있습니다.
|-------|--- backend1:8080
example.com:80---|HAProxy|--- backend2:8080
|-------|--- backend3:8080
원래 URL을 포함하는 사용자 정의 헤더를 추가하도록 HAProxy를 구성하고 싶습니다. 예를 들어 사용자가을 요청하는 경우 http://example.com/foo?bar=baz
:
GET /foo?bar=baz HTTP/1.1
Host: example.com:80
HAProxy가이 요청을 다음과 같이 백엔드로 변환하고 싶습니다.
GET /foo?bar=baz HTTP/1.1
Host: backend1:8080
x-custom-header: http://example.com/foo?bar=baz
이 reqadd
옵션을 사용하면 정적 값으로 헤더를 추가 할 수 있습니다. 다음을 사용하여 요청에서 경로 부분을 가져올 수있었습니다 reqrep
.
reqrep ^([^\ ]*)\ ([^\ ]*)\ (HTTP\/1\.[10]) \0\r\nx-custom-header:\ \2
그러나 불행히도 이것은 원래 URL의 경로 부분 만 캡처하여 다음 헤더를 생성합니다.
x-custom-header: /foo?bar=baz
따라서 내 질문은 HAProxy 1.4Host
에서 HTTP 요청 의 헤더와 첫 번째 줄을 사용자 정의 헤더로 결합 할 수 있는지 여부 입니다.
답변
짧은 대답 : 아니요, HAProxy 1.4 에서는이 작업을 수행 할 수 없습니다 .
그러나 1.5 이상 에서이 질문을 찾는 사람들의 경우 :
HAProxy 1.5 이상에서는 %[variable]
구문을 통해 변수를 참조 할 수 있으며 정적 문자열 만 사용하도록 제한되지 않습니다. HAProxy 구성 안내서의 섹션 7.3 (특히 계층 7 변수의 경우 7.3.6)에 어떤 변수가 있는지 확인할 수 있습니다 .
귀하의 경우에는 다음 url
과 같이 raw을보고 있습니다 .
http-request set-header X-Custom-Header %[url]