nginx correspondendo a localização semelhante, mas errada

2

Eu tenho alguns scripts / programas JSON expostos para coleta rápida de informações de um servidor. Eu uso nginx para expor aqueles apenas como URLs brutos. Então, dadas as seguintes localizações:

location ~ ^/api/status/? {
    rewrite ^(.*)$ /path/to/some/handler/wan.handler;
}

location ~ ^/api/status-lan/? {
    rewrite ^(.*)$ /path/to/some/handler/lan.handler;
}

Por que nginx corresponde à minha status-lan chamada à localização status ? Assim, posso ver minha saída de /api/status/ , mas, se eu visualizar /api/status-lan/ , obtenho a localização status .

    
por Urda 29.10.2014 / 23:16

1 resposta

2

Why does nginx match my status-lan call to the status location?

Porque a localização é uma expressão regular e esta expressão regular:

location ~ ^/api/status/? {

significa "começa com / api / status, seguido por uma barra final opcional", o que vem depois da partida não importa.

A configuração provavelmente deve ser:

location ~ ^/api/status/?$ {
    rewrite ^ /path/to/some/handler/wan.handler;
}

location ~ ^/api/status-lan/?$ {
    rewrite ^ /path/to/some/handler/lan.handler;
}

Ou seja. Combine o URL inteiro, não apenas o começo. Em caso de dúvida, ative o registro de regravação , pois isso tornará óbvio o que está acontecendo. e porquê.

    
por 30.10.2014 / 00:13

Tags