web-dev-qa-db-de.com

Apache 2.4 + PHP-FPM und Berechtigungsheader

Zusammenfassung: Das mod_proxy von Apache 2.4 scheint die Authorization-Header nicht an PHP-FPM zu übergeben. Gibt es eine Möglichkeit, dies zu beheben? 

Lange Version: Ich betreibe einen Server mit Apache 2.4 und PHP-FPM. Ich verwende APC sowohl für das Opcode-Caching als auch für das User-Caching. Wie vom Internet empfohlen, verwende ich den mod_proxy_fcgi von Apache 2.4, um die Anforderungen an FPM zu übergeben, wie folgt:

ProxyPassMatch ^/(.*\.php)$ fcgi://127.0.0.1:9000/foo/bar/$1

Das Setup funktioniert einwandfrei, mit einer Ausnahme: APCs gebündeltes apc.php, das zur Überwachung des Status von APC verwendet wird, erlaubt mir keine Anmeldung (erforderlich für das Betrachten von Cache-Einträgen von Benutzern). Wenn ich auf "Benutzercache-Einträge" klicke, um den Benutzercache anzuzeigen, werden Sie aufgefordert, mich anzumelden. Wenn Sie auf die Anmeldeschaltfläche klicken, wird das übliche HTTP-Anmeldeformular angezeigt. Die Eingabe des richtigen Anmelde- und Kennworts führt jedoch nicht zum Erfolg. Diese Funktion arbeitet einwandfrei, wenn sie mit mod_php anstelle von mod_proxy + php-fpm läuft. 

Nach einigem Googeln stellte ich fest, dass andere Leute dasselbe Problem hatten, und stellte fest, dass Apache die Authorization-HTTP-Header nicht an den externen FastCgi-Prozess übergeben hat. Leider habe ich nur ein Update für mod_fastcgi gefunden, das so aussah: 

FastCgiExternalServer /usr/lib/cgi-bin/php5-fcgi -Host 127.0.0.1:9000 -pass-header Authorization

Gibt es eine äquivalente Einstellung oder einen Workaround, der auch mit mod_proxy_fcgi funktionieren würde? 

32
CodeTwice

Verschiedene Apache-Module entfernen den Authorization-Header normalerweise aus "Sicherheitsgründen". Sie haben alle unterschiedliche obskure Einstellungen, die Sie ändern können, um dieses Verhalten zu umgehen. Sie müssen jedoch genau bestimmen, welches Modul dafür verantwortlich ist.

Sie können dieses Problem umgehen, indem Sie die Kopfzeile direkt über [env] an PHP übergeben:

SetEnvIf Authorization "(.*)" HTTP_AUTHORIZATION=$1

Siehe auch Zend Server Windows - Der Autorisierungsheader wird nicht an das Skript PHP übergeben

70
Rich

Ich habe lange gebraucht, um zu knacken, da es nicht unter mod_proxy oder mod_proxy_fcgi dokumentiert ist.

Fügen Sie Ihrem Apache conf oder .htaccess die folgende Direktive hinzu:

CGIPassAuth on

hier für Details.

29
limos

Ich habe keine ähnlichen Einstellungen mit mod_proxy_fcgi gefunden, ABER es funktioniert nur für mich standardmäßig. Es fragt nach einer Benutzerautorisierung (.htaccess wie üblich) und die PHP bekommt es und funktioniert wie bei mod_php oder fastcgi und pass-header. Ich weiß nicht, ob ich hilfreich war ...

BEARBEITEN: Es funktioniert nur auf teszt.com/ wenn der DirectoryIndex verwendet wird ... Wenn ich den php-Dateinamen weitergebe (selbst wenn die index.php!), Funktioniert es einfach nicht, übergeben Sie die auth nicht der php. Dies ist ein Blocker für mich, aber ich möchte nicht auf Apache 2.2 (und mod_fastgi) downgraden, also migriere ich zu Nginx (auch auf diesem Rechner).

0
DBLaci