
제3자 서비스로의 일부 무료 리디렉션을 유지하는 데 사용하는 컨테이너가 있습니다. 이는 여러 http-request 라인이 포함된 HAproxy 컨테이너입니다. 대부분은 리디렉션할 단일 hdr(호스트)입니다.
Azure에는 비밀번호 관리를 위한 3개의 서로 다른 URL이 있습니다. 저는 이를 모두 다른 페이지로 리디렉션하기 위해 서로 다른 경로를 사용하여 하나의 URL에 넣으려고 합니다.
이것이 내가 지금 가지고 있는 것입니다:
http-request redirect location http://aka.ms/passwordchange code 301 if { path /change hdr(host) -i passwords.example.com }
http-request redirect location https://aka.ms/sspr code 301 if { path /reset hdr(host) -i passwords.example.com }
http-request redirect location https://aka.ms/setupsecurityinfo code 301 if { hdr(host) -i passwords.example.com }
또한 hdr(host) 조건을 먼저 시도했고, 조건 사이에 'and' 문자열을 사용해도 시도했습니다.
어떤 이유로 이러한 다양한 변형에서는 항상 첫 번째 규칙에만 일치합니다. 따라서 경로가 지정되었는지 여부에 관계없이 모든 요청은 다음으로 이동합니다.http://aka.ms/passwordchange.
나는 이와 같은 하나의 라이너의 조건이 첫 번째 항목만 사용할 수 없고 사용할 수 없는 경우 현재 버전에서는 세 번째 규칙만 일치해야 한다는 사실을 기반으로 여러 부분을 가질 수 있다고 추측합니다.
여기서 누락되었을 수 있는 부분에 대한 도움과 설명을 제공해 주셔서 감사합니다.
답변1
이는 귀하가 의도한 의미를 의미하지 않습니다.
{ path /change hdr(host) -i passwords.example.com }
문자열 일치는 공백으로 구분된 여러 값을 허용하므로 이는 실제로 요청을 path
다음과 비교합니다.리터럴 문자열 중 하나 /change
또는 hdr(host)
또는 -i
또는 passwords.example.com
전혀 의도한 것이 아닙니다... 그러나 이는 HAProxy가 원칙적으로는 구문 오류임에도 불구하고 이를 구문 오류로 간주하지 않는 이유를 설명합니다.
관련되지 않은 두 가지 항목을 테스트 중이므로 두 개의 익명 ACL이 필요합니다.
{ path /change } { hdr(host) -i passwords.example.com }
둘 사이의 "and"는 암시적입니다.
구성은 다음과 같아야 합니다.
http-request redirect location http://aka.ms/passwordchange code 301 if { path /change } { hdr(host) -i passwords.example.com }
http-request redirect location https://aka.ms/sspr code 301 if { path /reset } { hdr(host) -i passwords.example.com }
http-request redirect location https://aka.ms/setupsecurityinfo code 301 if { hdr(host) -i passwords.example.com }