Zusammenfassung:
Der 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 mod_proxy_fcgi von Apache 2.4, um die Anfragen an FPM weiterzuleiten, wie folgt:
Das Setup funktioniert gut, außer einer Sache: APCs gebündelte apc.php, die verwendet wird, um den Status von APC zu überwachen, erlaubt mir nicht, mich anzumelden (erforderlich, um Benutzer-Cache-Einträge anzuzeigen). Wenn ich auf “Benutzer-Cache-Einträge” klicke, um den Benutzer-Cache anzuzeigen, werde ich aufgefordert, mich anzumelden. Wenn ich auf die Anmeldeschaltfläche klicke, wird das übliche HTTP-Anmeldeformular angezeigt, aber die Eingabe des richtigen Benutzernamens und Passworts führt zu keinem Erfolg. Diese Funktion funktioniert perfekt, wenn sie mit mod_php statt mit mod_proxy + php-fpm ausgeführt wird.
Nach einigem Googeln stellte ich fest, dass andere Leute das gleiche Problem hatten, und stellte fest, dass es daran lag, dass Apache die Autorisierungs-HTTP-Header nicht an den externen FastCgi-Prozess weitergab. Leider habe ich nur einen Fix für mod_fastcgi gefunden, der so aussah:
Gibt es eine äquivalente Einstellung oder eine Problemumgehung, die auch mit mod_proxy_fcgi funktionieren würde?
Vielen Dank für das Snippet “-pass-header Authorization”! Hat mir mit fastcgi geholfen.
– Sergio
6. November 13 um 21:44 Uhr
Reich
Verschiedene Apache-Module entfernen die Authorization Header, normalerweise aus “Sicherheitsgründen”. Sie alle haben unterschiedliche obskure Einstellungen, die Sie anpassen können, um dieses Verhalten zu überstimmen, aber Sie müssen genau bestimmen, welches Modul schuld ist.
Sie können dieses Problem umgehen, indem Sie den Header über die env direkt an PHP übergeben:
Siehe auch Zend Server Windows – Autorisierungsheader wird nicht an PHP-Skript übergeben
In einigen Szenarien funktioniert selbst dies nicht direkt und Sie müssen auch Ihren PHP-Code für den Zugriff ändern $_SERVER['REDIRECT_HTTP_AUTHORIZATION'] eher, als $_SERVER['HTTP_AUTHORIZATION']. Siehe Wenn Umgebungsvariablen in Apache RewriteRule-Anweisungen festgelegt werden, was bewirkt, dass dem Variablennamen das Präfix „REDIRECT_“ vorangestellt wird?
Dies könnte Benutzern von PHP 5.5+ und Apache 2.4 helfen. Nachdem Sie SetEnvIf Authorization “(.*)” HTTP_AUTHORIZATION=$1 zur .htaccess hinzugefügt haben, müssen Sie $_SERVER verwenden[‘REDIRECT_HTTP_AUTHORIZATION’] Variable anstelle von $_SERVER[‘HTTP_AUTHENTICATION’].
– Rahi
16. Februar 15 um 17:11 Uhr
wo fügst du das hinzu=¿?
– Alberto Acuña
23. August 16 um 20:24 Uhr
Zur Apache-Konfiguration, in .htaccess oder /etc/httpd/conf
– Reich
24. August 16 um 14:31 Uhr
Danke. Es funktionierte für mich.
– VishalParkash
11. Januar 17 um 09:17 Uhr
Erstaunlich – gerade unser Unternehmen gerettet! Ich wünschte, ich könnte das 100 Mal positiv bewerten.
– Kronklee
26. Mai ’19 um 19:47 Uhr
Ich habe lange gebraucht, um das zu knacken, da es nicht unter mod_proxy oder mod_proxy_fcgi dokumentiert ist.
Fügen Sie die folgende Direktive zu Ihrer Apache-conf oder .htaccess hinzu:
Beachten Sie, dass dies nur auf Apache 2.4.13 oder höher funktioniert, dh nicht auf einer Version von Ubuntu ab 15.10.
– Berend de Boer
31. Dezember 15 um 0:51 Uhr
Diese Lösung ist sinnvoller, da sie näher an der Proxy-Einstellung liegt, die die Weitergabe von Authentifizierungsheadern deaktiviert, dh: SetHandler “proxy:fcgi://127.0.0.1:9000” CGIPassAuth on
– Julz
12. Oktober 17 um 16:50 Uhr
Danke dafür, definitiv die beste Antwort. Beachten Sie, dass dies nur funktioniert, wenn Sie verwenden SetHandlereher als die älteren ProxyPassMatch Methode.
– Tölpel
21. Februar 20 um 21:21 Uhr
DBLaci
Ich habe keine ähnlichen Einstellungen mit mod_proxy_fcgi gefunden, ABER es funktioniert einfach standardmäßig für mich. Es fragt nach der Benutzerautorisierung (.htaccess wie üblich) und die PHP bekommt sie und funktioniert wie mit 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. Dies ist ein Blocker für mich, aber ich möchte nicht auf Apache 2.2 (und mod_fastgi) herunterstufen, also migriere ich zu nginx (auch auf diesem Computer).
.
8220400cookie-checkApache 2.4 + PHP-FPM und Autorisierungsheaderyes
Vielen Dank für das Snippet “-pass-header Authorization”! Hat mir mit fastcgi geholfen.
– Sergio
6. November 13 um 21:44 Uhr