nginx: auth_basic und php

8

Ich möchte einen Ordner meiner Website mit einem Passwort unter Verwendung von auth_basic schützen. Dieser Ordner enthält PHP-Skripte, die ausgeführt werden sollen, wenn sie angefordert werden.

Ich habe Folgendes versucht:

%Vor%

Ich werde nach dem Benutzernamen / Passwort gefragt, wenn ich die php-Skripte in diesem Admin-Ordner anfrage, aber die PHP-Skripte werden immer heruntergeladen anstatt über fastcgi ausgeführt.

Was mache ich falsch?

EDIT: Auf meiner lokalen Maschine funktioniert alles gut mit dieser Konfiguration. o0
EDIT: BTW, PHP arbeitet außerhalb des Admin-Ordners mit den gleichen fastcgi-Optionen.
EDIT: OMG! Die Konfiguration der Site wurde unter / etc / nginx / sites-available / mysite gespeichert und / etc / nginx / sites-enabled / enthielt einen Symlink zur mysite-Datei. Seit einiger Zeit hatte das Ändern der mysite-Datei keinen Effekt mehr. Z.B. Wenn Sie alle Standorte auf "Alle verweigern" setzen, hat das keine Auswirkungen. Die Dateien wurden ohne Probleme gesendet.
Also habe ich den Symlink entfernt und den Server neu gestartet. Dann habe ich den Symlink erneut erstellt, den Server neu gestartet und alles funktioniert wie erwartet. Kann jemand das seltsame Verhalten erklären?

Gestelle Grüße, Biggie

    
Biggie 14.01.2011, 23:25
quelle

4 Antworten

12

Bei dieser Konfiguration passt nginx nur zu eins der beiden Blöcke - dem Block mit der höchsten Priorität.

Die Lösung besteht darin, den PHP-Block in den AUTH-Block zu kombinieren. Dies ist der Ansatz, den der Autor selbst, Igor Sysoev, empfiehlt.

%Vor%     
fisharebest 23.06.2012 06:09
quelle
1

Das ist eine alte Frage, aber ich hatte gerade das gleiche Problem, also hier ist die Erklärung.

Nginx verwendet die in den Dokumenten beschriebenen Regeln , um den Standortblöcken zu entsprechen. Bei herkömmlichen Blöcken ist die längste Übereinstimmung diejenige, die angewendet wird, aber bei regulären Ausdrücken ist immer der erste übereinstimmende Block, der angewendet wird.

Auf Ihrem Produktionsserver hatten Sie höchstwahrscheinlich einen location ~ \.php$ -Block über Ihrem Admin-Block, daher wurde der Listenblock, den Sie gepostet haben, nie angewendet.

Lange Kurzgeschichte: Wenn Sie mit regulärem Ausdruck umgehen, hören Sie Blöcke in nginx auf, ordnen Sie die Dinge an. Setzen Sie die spezifischeren Übereinstimmungen vor die allgemeinen Übereinstimmungen.

    
mpontes 02.06.2012 13:21
quelle
-1

Sie müssen die folgende Zeile entfernen:

%Vor%     
Duc.Nguyen 02.08.2011 03:36
quelle
-1

Vielleicht haben Sie vergessen, root hinzuzufügen:

%Vor%     
ilikecandy397 14.07.2015 07:37
quelle

Tags und Links