
Eu tenho um contêiner que uso para manter alguns redirecionamentos de cortesia para serviços de terceiros. É um contêiner HAproxy com várias linhas de solicitação http. A maioria é um único HDR (host) para redirecionar.
O Azure tem 3 URLs diferentes para gerenciamento de senhas. Estou tentando colocar todas elas em uma URL com caminhos diferentes para redirecionar para páginas diferentes.
Isso é o que tenho agora:
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 }
Também tentei primeiro com a condição hdr(host) e também tentei com uma string 'e' entre as condições.
Por alguma razão, em todas essas diferentes variações, sempre corresponde apenas à primeira regra. Portanto, todas as solicitações, independentemente de um caminho ser especificado, vão parahttp://aka.ms/passwordchange.
Suponho que as condições em um liner como este podem ter várias partes com base no fato de que, se não pudessem e usassem apenas o primeiro item, na versão atual elas deveriam corresponder apenas à terceira regra.
Obrigado por qualquer ajuda e explicação sobre o que posso estar faltando aqui.
Responder1
Isso não significa o que você pretendia que significasse:
{ path /change hdr(host) -i passwords.example.com }
As correspondências de string aceitam vários valores separados por um espaço, portanto, na verdade, isso é uma comparação da solicitação path
comqualquer uma das strings literais /change
or hdr(host)
or -i
or passwords.example.com
which não é o que você pretendia ... mas isso explica por que o HAProxy não considera isso um erro de sintaxe, embora, em princípio, seja.
Você está testando duas coisas não relacionadas, então precisa de duas ACLs anônimas:
{ path /change } { hdr(host) -i passwords.example.com }
O "e" entre os dois está implícito.
Sua configuração deve ficar assim:
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 }