원래 요청 된 리소스의 절대 주소를 포함하는 사용자 지정 헤더를 추가하는 방법

다음과 같은 설정이 있습니다.

                 |-------|--- 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]