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 [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?
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