nginx fecha um local com auth_basic, se um determinado argumento foi passado

1

Existe o URL /index.php . O acesso a ele deve ser restrito, se o argumento 'foo' for definido como, por exemplo, 'bar', ou seja, /index.php deve ser aberto livremente por qualquer pessoa, e abrir /index.php?foo=bar deve prosseguir somente após a autorização básica. Eu sei sobre a diretiva if ,

location = index.php {
    if ($arg_foo ~ bar) {
        auth_basic "";
        auth_basic_user_file myauth;  
    }
    fastcgi_pass unix:/var/run/php-fpm.socket;
}

... mas um location com if separado não permite que auth_basic seja colocado dentro de uma cláusula if . Então eu pensei que deveria haver algum tipo de rewrite para outro local, provavelmente passando um cabeçalho contendo o local original que queríamos chegar, verifique o cabeçalho e depois de passar a autenticação, reescreva para esse local, mas tudo isso parece muito muito de um hack e provavelmente pode ser feito mais fácil, mas eu não sei como.

    
por tijagi 01.06.2016 / 09:09

1 resposta

0

Sugiro que você use map , já que auth_basic tem um valor especial de off para desativar a autenticação:

http {
    [...]
    map $arg_foo $auth_realm {
        default off;
        ~bar    "";
    }

    server {
        [...]
        location = /index.php {
            auth_basic $auth_realm;
            auth_basic_user_file myauth;

            fastcgi_pass unix:/var/run/php-fpm.socket;
        }
    }
}

Observação: suspeito que o snippet de configuração que você forneceu não está funcionando, pois o prefixo URI da diretiva location não inicia com o caractere / obrigatório.

    
por 14.08.2016 / 16:06

Tags