HAProxy 1.7 맵 파일을 사용하여 특정 도메인 리디렉션/다시 쓰기

HAProxy 1.7 맵 파일을 사용하여 특정 도메인 리디렉션/다시 쓰기

저는 HAProxy를 처음 사용하며 도메인이 정의된 맵 파일에서 요청을 리디렉션하고 싶습니다. 간단한 예: 내 Redirect.map 파일에서:

abc.com xyz.com
def.ru idk.com

따라서 사용자가 abc.com 또는 def.ru 도메인에 요청을 보내면 정의된 도메인으로 리디렉션됩니다. 그러나 그가 asd.com을 요청하는 경우 리디렉션이 수행되어서는 안 됩니다. 내 목표는 이러한 리디렉션을 맵 파일에 정의하여 쉽게 변경할 수 있도록 하는 것입니다.

다음으로 나는 uri 재작성과 동일한 작업을 수행하고 싶습니다. 다음과 같은 것 :

http-request set-uri X if Y from rewrite.map

따라서 내 지도 파일은 다음과 같습니다.

 (my X variable)    (my Y variable)
/abc/def/specific  www.mydomain.com/specific

HAProxy를 사용하여 이 작업을 수행할 기회가 있습니까?

답변1

http-request redirect location https://%[hdr(host),map(/etc/haproxy/rewrite.map)]%[capture.req.uri] code 301 if { hdr(host),map(/etc/haproxy/rewrite.map) -i -m found }

그만큼hdr(x)술책요청 헤더를 읽고 x찾은 값을 반환합니다. (기술적으로는 이 헤더의 마지막 항목을 읽지만 헤더 Host는 한 번만 나타나야 합니다.)

그만큼map변환기그 앞의 값( 와 연결됨 ,)을 가져와 맵 테이블에서 조회한 후 결과를 반환합니다.

일치하는 항목이 없으면 결과가 반환되지 않으므로 -m found테스트에서는 결과가 반환되지 않으며 규칙이 일치하지 않습니다. ( -i대소문자를 구분하지 않고 조회합니다.)

규칙이 일치하면 Location리터럴 문자열 https://(해당하는 경우 이를 변경 http) + 맵 파일에서 다시 작성된 호스트 이름 + 선행으로 시작 /하고 경로를 포함하는 원래 요청 URI를 사용하여 응답 헤더에 대한 새 URL을 작성합니다. 전체 요청 URI를 보존하는 쿼리 문자열입니다.

원래 URI를 유지하지 않고 모든 것을 대상 사이트의 기본 페이지로 보내고 싶다면 %[capture.req.uri]표현식에서 제거하세요.

관련 정보