web-dev-qa-db-fra.com

Apache 2.4 + PHP-FPM et en-têtes d'autorisation

Résumé: Le module mod_proxy d'Apache 2.4 ne semble pas transmettre les en-têtes d'autorisation à PHP-FPM. Est-ce qu'il y a un moyen de réparer ceci? 

Version longue: J'utilise un serveur avec Apache 2.4 et PHP-FPM. J'utilise APC pour la mise en cache d'opcode et la mise en cache d'utilisateur. Comme recommandé par Internet, j'utilise mod_proxy_fcgi d'Apache 2.4 pour envoyer les requêtes à FPM, comme ceci:

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

La configuration fonctionne correctement, à une exception près: apc.php fourni avec APC, utilisé pour surveiller l’état d’APC, ne me permet pas de me connecter (requis pour consulter les entrées de cache utilisateur). Lorsque je clique sur "Entrées du cache de l'utilisateur" pour voir le cache de l'utilisateur, il me demande de me connecter. Un clic sur le bouton de connexion affiche le formulaire de connexion HTTP habituel, mais la saisie du nom de connexion et du mot de passe correct n'aboutit à rien. Cette fonction fonctionne parfaitement lorsque vous utilisez mod_php au lieu de mod_proxy + php-fpm. 

Après quelques recherches sur Google, j'ai constaté que d'autres personnes avaient le même problème et j'ai découvert que c'était parce qu'Apache ne transmettait pas les en-têtes HTTP d'autorisation au processus externe FastCgi. 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

Existe-t-il un paramètre équivalent ou une solution de contournement qui fonctionnerait également avec mod_proxy_fcgi? 

32
CodeTwice

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 annuler ce comportement, mais vous devrez 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=$1

Voir aussi Zend Server Windows - L'en-tête d'autorisation n'est pas passé au script PHP

70
Rich

Cela m'a pris longtemps à craquer, car ce n'est pas documenté sous mod_proxy ou mod_proxy_fcgi.

Ajoutez la directive suivante à votre conf Apache ou .htaccess:

CGIPassAuth on

Voir ici pour plus de détails.

29
limos

Je n'ai trouvé aucun paramètre similaire avec mod_proxy_fcgi MAIS cela fonctionne pour moi par défaut. Il demande l'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 de DirectoryIndex ... Si je passe le nom du fichier php (même si le index.php!), Il ne fonctionne tout simplement pas, ne passez pas l’authentification à le php. C'est un bloqueur pour moi, mais je ne veux pas rétrograder vers Apache 2.2 (et mod_fastgi), alors je migre vers nginx (sur cette machine également).

0
DBLaci