Autenticação básica do NGINX apenas para POST

8

Estou configurando o nginx para servir os repositórios do Mercurial. Funciona quando não está usando a autenticação básica, ou quando eu uso a autenticação básica.

O que eu quero fazer é usar apenas a autenticação básica em solicitações POST, para que qualquer pessoa tenha acesso por pull, mas apenas usuários autenticados podem enviar por push.

Eu tentei o seguinte,

if ($request_method = POST) {
  auth_basic "Restricted";
  auth_basic_user_file /path/to/userfile
}

No entanto, reclama sobre "a diretiva auth_basic não é permitida aqui".

Como posso resolver isso?

Adrian Heine
fonte

Respostas:

13

Você deve usar limit_except:

limit_except GET HEAD {
    auth_basic 'Restricted';
    auth_basic_user_file /path/to/userfile;
}

Funciona desde o nginx 0.8.48, nas versões mais antigas havia um bug que fastcgi_passnão era herdado dentro do bloco limit_except.

Mitar
fonte