fragen stichworte

Apache 2.4 / PHP-FPM ProxyPassMatch und Zugriffsbeschränkung

Ich habe das Apache/PHP-Setup genau wie folgt: https://wiki.apache.org/httpd/PHP-FPM

Sie enthält die erwähnte ProxyPassMatch -Regel:

ProxyPassMatch ^/(.*\.php)$ fcgi://127.0.0.1:9000/path/to/files/$1

Dadurch werden alle Anforderungen mit .php an einen Proxy gesendet, und letztendlich wird PHP gut bedient.
Ich habe jedoch versucht, einige Zugriffskontrollen durchzuführen, und das Proxying scheint Vorrang zu haben. Meine Ordnerstruktur sieht so aus:

/            <-- PHP files
/extra/      <-- PHP files
/css/
/img/

Es sollte Zugriff auf die PHP-Dateien im Stammverzeichnis geben, aber ich möchte den Zugriff auf das Verzeichnis extra beschränken. Ich habe diese Zeilen zu meiner Hauptkonfiguration hinzugefügt:

<Directory "/extra">
    Order deny,allow
    Deny from all
</Directory>

Die PHP-Dateien werden jedoch immer noch ausgeführt ... Wenn ich eine andere Art von Datei in den Ordner lege, wird sie erfolgreich blockiert, sodass die Direktive funktioniert. Ich vermute, die ProxyPassMatch -Regel verbietet es, für PHP-Dateien zu arbeiten.

Ich habe ein paar Dinge ausprobiert, z. B. die ProxyPassMatch -Regel in einen <Directory> -Block (funktioniert nicht, da Sie ProxyPassMatch nicht in solchen Blöcken verwenden können) und ProxyPassMatch durch einen mit dem Flag [P] (ähnlich: Apache 2.4 + PHP-FPM + ProxyPassMatch, aber es wurde nicht weitergeleitet).

Meine Frage ist fast genau dieselbe wie diese: http://www.gossamer-threads.com/lists/apache/users/417758. Es erhielt jedoch keine endgültige Antwort.

Was mich verwirrt, ist, dass Sie eine Proxy-Regel haben müssen, aber wenn Sie sie einfügen, scheint nichts anderes von Bedeutung zu sein (.htaccess funktioniert auch nicht mehr). Darüber hinaus wirft dies Fragen zur Sicherheit auf. Alles, was .php enthält, bleibt von meinen ausgefallenen Zugangsbestimmungen unberührt und geht direkt in die internen Komponenten des Systems über. Wie kann ich PHP-FPM mit den richtigen Sicherheitsregeln in Apache kombinieren?

antworten

Mit ProxyPassMatch .htaccess werden die Dateien vollständig ignoriert. Ähnliches geschieht wahrscheinlich mit den ignorierten Anweisungen in der Hauptkonfigurationsdatei.

Versuchen Sie stattdessen, FilesMatch und SetHandler zu verwenden, wie in einer 2015-Antwort auf die Frage beschrieben, die Sie bereits mit und in diesem Blogbeitrag verlinkt haben.

Setzen Sie dies vor Ihren ProxyPassMatch

ProxyPass/extra !

Wenn ProxyPass findet, dass/extra der aktuelle Ordner ist, wird ProxyPassMatch nicht verwendet. Wichtig ist das! am Ende der Zeile.

Weitere Informationen finden Sie hier: ProxyPass