Question NGINX basic auth uniquement pour POST


Je suis en train de configurer 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 utiliser simplement l'authentification de base sur les demandes POST, afin que tout le monde ait un accès direct, mais que seuls les utilisateurs authentifiés peuvent transmettre.

J'ai essayé le suivant,

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 résoudre ça?


7
2018-04-01 17:05


origine




Réponses:


Tu devrais 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_pass n'a pas été hérité à l'intérieur du bloc limit_except.


10
2018-03-12 13:47