저는 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]
표현식에서 제거하세요.