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


11

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

                 |-------|--- 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 요청 의 헤더와 첫 번째 줄을 사용자 정의 헤더로 결합 할 수 있는지 여부 입니다.


(backend-id) reqadd를 참조하는 acl과 결합을 시도 했습니까 be_id? 정확하게 동적이지는 않지만 백엔드 수가 적 으면 더 가까이 갈 수 있습니다 ... reqirep선택적 acl도 지원하므로 각 백엔드에 대해 별도의 정규 표현식을 작성할 수 있습니다. 각 acl이 선택한 백엔드와 일치하는 경우에만 활성화됩니다. 신분증.
Michael-sqlbot 1

답변:


18

짧은 대답 : 아니요, 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]

1
1.4에서는 이것이 불가능하다는 결론을 확인해 주셔서 감사합니다. 로 전환했습니다 nginx.
Darin Dimitrov

% [url]은 (는) 항상 전체 URL은 아니지만 haproxy가 할 수있는 최상의 것으로 보입니다. haproxy 1.8 URL 변수 문서 : cbonte.github.io/haproxy-dconv/1.8/configuration.html#7.3.6-url
zie
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.