Apache 2.4 + PHP-FPM et les en-têtes D'autorisation
résumé: Le mod_proxy d'Apache 2.4 ne semble pas passer les en-têtes D'autorisation à PHP-FPM. Est-il possible de résoudre ce problème?
version longue: J'exécute un serveur avec Apache 2.4 et PHP-FPM. J'utilise APC pour la mise en cache opcode et la mise en cache utilisateur. Comme recommandé par Internet, j'utilise mod_proxy_fcgi d'Apache 2.4 Pour proxy les requêtes à FPM, comme ceci:
ProxyPassMatch ^/(.*.php)$ fcgi://127.0.0.1:9000/foo/bar/
l'installation fonctionne bien, sauf une chose: apc empaqueté apc.php, utilisé pour surveiller L'état D'APC ne me permet pas de me connecter (requis pour regarder les entrées de cache utilisateur). Lorsque je clique sur "User cache entries" pour voir le cache de l'utilisateur, il me demande de me connecter, en cliquant sur le bouton de connexion affiche le formulaire de connexion HTTP habituel, mais entrer le login et le mot de passe corrects ne donne aucun succès. Cette fonction fonctionne parfaitement avec mod_php au lieu de mod_proxy + php-fpm.
après quelques recherches sur Google, j'ai découvert que d'autres personnes avaient le même problème et compris que C'était parce Qu'Apache ne passait pas les en-têtes HTTP D'autorisation au processus FastCgi externe. Malheureusement, je n'ai trouvé qu'un correctif pour mod_fastcgi, qui ressemblait à ceci:
FastCgiExternalServer /usr/lib/cgi-bin/php5-fcgi -host 127.0.0.1:9000 -pass-header Authorization
y a-t-il un paramètre équivalent ou une solution qui fonctionnerait aussi avec mod_proxy_fcgi?
3 réponses
divers modules Apache vont supprimer l'en-tête Authorization
, généralement pour des"raisons de sécurité". Ils ont tous différents paramètres obscurs que vous pouvez modifier pour renverser ce comportement, mais vous aurez besoin de déterminer exactement quel module est à blâmer.
vous pouvez contourner ce problème en passant l'en-tête directement à PHP via l'env:
SetEnvIf Authorization "(.*)" HTTP_AUTHORIZATION=
Je n'ai pas trouvé de paramétrage similaire avec mod_proxy_fcgi mais cela fonctionne simplement pour moi par défaut. Il demande d'autorisation de l'utilisateur (.htaccess comme d'habitude) et le php l'obtient, et fonctionne comme avec mod_php ou fastcgi et pass-header. Je ne sais pas si j'ai été utile...
EDIT: il ne fonctionne que sur teszt.com / lors de L'utilisation du DirectoryIndex... Si je passe le nom du fichier php (même si l'index.php!) cela ne fonctionne tout simplement pas, ne passez pas l'auth au php. Ce est un bloqueur pour moi, mais Je ne veux pas rétrograder vers apache 2.2 (et mod_fastgi) donc je migrerai vers nginx (sur cette machine aussi).