NGINX Basic Auth nur für POST

8

Ich richte Nginx für Mercurial-Repositories ein. Es funktioniert, wenn die Basisauthentifizierung überhaupt nicht verwendet wird oder wenn ich die Basisauthentifizierung überall verwende.

Was ich tun möchte, ist, nur die grundlegende Authentifizierung für POST-Anforderungen zu verwenden, damit jeder Pull-Zugriff hat, aber nur authentifizierte Benutzer pushen können.

Ich habe folgendes versucht:

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

Es beschwert sich jedoch über "auth_basic Direktive ist hier nicht erlaubt".

Wie kann ich das lösen?

Adrian Heine
quelle

Antworten:

13

Sie sollten verwenden limit_except:

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

Es funktioniert seit Nginx 0.8.48. In älteren Versionen gab es einen Fehler, bei dem fastcgi_passder Block limit_except nicht vererbt wurde.

Mitar
quelle