Authentification de base NGINX uniquement pour POST

8

Je configure nginx pour servir les référentiels Mercurial. Cela fonctionne lorsque vous n'utilisez pas du tout l'authentification de base ou lorsque j'utilise l'authentification de base partout.

Ce que je veux faire, c'est simplement utiliser l'authentification de base sur les requêtes POST, pour que tout le monde ait un accès pull, mais seuls les utilisateurs authentifiés peuvent pousser.

J'ai essayé ce qui suit,

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

Cependant, il se plaint de "la directive auth_basic n'est pas autorisée ici".

Comment puis-je resoudre ceci?

Adrian Heine
la source

Réponses:

13

Vous devez utiliser limit_except:

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

Cela fonctionne depuis nginx 0.8.48, dans les anciennes versions il y avait un bug où fastcgi_passn'était pas hérité à l'intérieur du bloc limit_except.

Mitar
la source