2013-06-10 1 views
23

Zusammenfassung: Apache 2.4 mod_proxy scheint die Autorisierungsheader nicht an PHP-FPM zu übergeben. Gibt es eine Möglichkeit, das zu beheben?Apache 2.4 + PHP-FPM und Authorization Header

Lange Version: Ich betreibe einen Server mit Apache 2.4 und PHP-FPM. Ich verwende APC für Opcode-Caching und Benutzer-Caching. Wie durch das Internet empfohlen, verwende ich Apache 2.4 des mod_proxy_fcgi die Anforderungen an FPM zu Proxy, wie folgt aus:

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

Das Setup funktioniert gut, bis auf eine Sache: gebündelt apc.php von APC verwendet die zur Überwachung Der Status von APC erlaubt mir nicht, mich einzuloggen (erforderlich, um Benutzer-Cache-Einträge zu betrachten). Wenn ich auf "User cache entries" klicke, um den User-Cache zu sehen, werde ich aufgefordert, mich einzuloggen. Wenn ich auf die Login-Schaltfläche klicke, wird das übliche HTTP-Login-Formular angezeigt, aber die Eingabe des korrekten Logins und Passworts führt nicht zum Erfolg. Diese Funktion funktioniert perfekt, wenn Sie mit mod_php anstelle von mod_proxy + php-fpm arbeiten.

Nach einigem googeln stellte ich fest, dass andere Leute das gleiche Problem hatten und herausfanden, dass es daran lag, dass Apache die Autorisierungs-HTTP-Header nicht an den externen FastCgi-Prozess weitergab. Leider fand ich nur ein Update für mod_fastcgi, die so aussah:

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

Gibt es eine entsprechende Einstellung oder eine Abhilfe, die auch mit mod_proxy_fcgi funktionieren würde?

+0

Danke für das "-pass-header Authorization" -Snippet! Hat mir mit fastcgi geholfen. – Sergio

Antwort

57

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

Sie können, indem die Header direkt an PHP über die env, um dieses Problem zu umgehen:

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

Siehe auch Zend Server Windows - Authorization header is not passed to PHP script

+1

Das hat den Trick gemacht, danke! – CodeTwice

+4

Dies könnte Benutzern von PHP 5.5+ und Apache 2.4 helfen. Nach dem Hinzufügen von SetEnvIf Authorization "(. *)" HTTP_AUTHORIZATION = $ 1 für die .htaccess müssen Sie die Variable $ _SERVER ['REDIRECT_HTTP_AUTHORIZATION'] anstelle von $ _SERVER ['HTTP_AUTHENTICATION'] verwenden. – Rahi

+0

wo fügst du das hinzu = ¿? –

0

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

EDIT: es funktioniert nur auf teszt.com/ bei der Verwendung der DirectoryIndex ... Wenn ich den PHP-Dateinamen (auch wenn die index.php!) es funktioniert einfach nicht, übergeben sie die auth nicht an den php. Dies ist ein Blocker für mich, aber ich möchte nicht auf Apache 2.2 (und mod_fastgi) herabstufen, also migriere ich auch auf nginx (auf diesem Rechner).

19

Das hat mich eine lange Zeit zu knacken, da sie nicht unter Mod_proxy dokumentiert ist oder mod_proxy_fcgi.

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

CGIPassAuth on 

here für Details.

+1

Hinweis: Dies funktioniert nur mit Apache 2.4.13 oder höher, d. H. Nicht mit einer Version von Ubuntu ab 15.10. –

+0

Diese Lösung macht mehr Sinn, da es näher an den Proxy einstellen, dass behinderte Weitergabe Auth-Header, das heißt: SetHandler "proxy: fcgi: //127.0.0.1: 9000" CGIPassAuth auf – Julz

Verwandte Themen