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

Résumé: 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: Je gère un serveur avec Apache 2.4 et PHP-FPM. J’utilise APC à la fois pour la mise en cache de l’opcode et pour la mise en cache des utilisateurs. Comme recommandé par Internet, j’utilise le 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 

L’installation fonctionne correctement, sauf une chose: apc.php fourni par APC, utilisé pour surveiller l’état d’APC, ne me permet pas de me connecter (requirejs pour consulter les entrées du cache utilisateur). Lorsque je clique sur “Entrées de cache utilisateur” pour voir le cache utilisateur, il me demande de me connecter, en cliquant sur le bouton de connexion, le formulaire de connexion HTTP habituel s’affiche, mais le bon mot de passe Cette fonction fonctionne parfaitement lorsque vous utilisez mod_php au lieu de mod_proxy + php-fpm.

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

Divers modules Apache suppriment l’en-tête Authorization , généralement pour des “raisons de sécurité”. Ils ont tous des parameters obscurs différents que vous pouvez modifier pour contourner 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 transmis au script PHP

Cela m’a pris beaucoup de temps pour craquer, car ce n’est pas documenté sous mod_proxy ou mod_proxy_fcgi.

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

 CGIPassAuth on 

Voir ici pour plus de détails.

Je n’ai pas trouvé de parameters similaires avec mod_proxy_fcgi MAIS cela fonctionne juste pour moi par défaut. Il demande l’autorisation de l’utilisateur (.htaccess comme d’habitude) et le php l’obtient, et fonctionne avec mod_php ou fastcgi et pass-header. Je ne sais pas si j’étais utile …

EDIT: ça ne marche que sur teszt.com/ quand on utilise DirectoryIndex … Si je passe le nom du fichier php (même si index.php!) Ça ne marche pas, ne passe pas l’auth au php. Ceci est un bloqueur pour moi, mais je ne veux pas rétrograder vers apache 2.2 (et mod_fastgi) donc je migre vers nginx (sur cette machine aussi).