Localização sem distinção entre maiúsculas e minúsculas com proxy_pass com distinção entre maiúsculas e minúsculas

2

Temos vários locais com configuração de proxies reversos. Nossa configuração atual em funcionamento é:

upstream backends {
    server Backend1;
    server Backend2;
}

server {
    ... other server config stuff here ...

    location /App1 {
        ... proxy header stuff ...

        proxy_pass http://backends/App1;
     }
}

Agora, o que estamos tentando fazer é configurá-lo de modo que os back-ends que diferenciam maiúsculas e minúsculas (neste caso, o Backend1 / 2 link ) possam seja insensível ao público de modo que você possa acessar o link OU link (ou qualquer variação de)

Nossa nova configuração que estamos tentando trabalhar é algo como:

location ~* /App1 {
    proxy_pass http://backends/App1;
}

Mas não há dados quando recarregamos a configuração. Estamos vendo o erro:

"proxy_pass" cannot have URI part in location given by regular expression, or inside named location, or inside "if" statement, or inside "limit_except"...

Quaisquer pensamentos / insights sobre como podemos realizar isso?

    
por djneely 21.09.2016 / 20:17

1 resposta

3

A reescrita implícita executada por proxy_pass não funcionará na presença de um local de expressão regular. Consulte este documento para saber mais.

No entanto, você pode usar um rewrite ... break para executar a mesma função.

location ~* /App1(?<stuff>.*)$ {
    rewrite ^ /App1$stuff break;
    proxy_pass http://backends;
}

A expressão regular é estendida com uma captura nomeada para capturar o restante do URI, em seguida, a instrução rewrite cria um novo URI para transmitir o autor.

Veja este documento para detalhes.

    
por 21.09.2016 / 21:01

Tags