it-swarm.com.ru

Apache 2.4 + PHP-FPM и заголовки авторизации

Резюме: Mod_proxy в Apache 2.4, похоже, не передает заголовки авторизации в PHP-FPM. Есть ли способ это исправить? 

Длинная версия: Я использую сервер с Apache 2.4 и PHP-FPM. Я использую APC для кэширования кода операции и пользовательского кэширования. В соответствии с рекомендациями Интернета, я использую mod_proxy_fcgi в Apache 2.4 для прокси-запросов к FPM, например так:

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

Настройка работает нормально, за исключением одного: встроенный в APC файл apc.php, используемый для мониторинга состояния APC, не позволяет мне входить в систему (требуется для просмотра записей кэша пользователя). Когда я нажимаю «Записи кэша пользователя», чтобы просмотреть кэш пользователя, он запрашивает у меня вход в систему, при нажатии на кнопку входа в систему отображается обычная форма входа в систему HTTP, но ввод правильного имени пользователя и пароля не дает успеха. Эта функция отлично работает при запуске с mod_php вместо mod_proxy + php-fpm. 

После некоторого поиска в Google я обнаружил, что у других людей возникла та же проблема, и выяснил, что это связано с тем, что Apache не передает HTTP-заголовки авторизации во внешний процесс FastCgi. К сожалению, я нашел только исправление для mod_fastcgi, которое выглядело так: 

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

Есть ли эквивалентная настройка или какой-то обходной путь, который также будет работать с mod_proxy_fcgi? 

32
CodeTwice

Различные модули Apache удаляют заголовок Authorization, обычно по «соображениям безопасности». Все они имеют разные скрытые настройки, которые вы можете настроить, чтобы отменить это поведение, но вам нужно точно определить, какой модуль виноват.

Вы можете обойти эту проблему, передав заголовок непосредственно в PHP через env:

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

Смотрите также Zend Server Windows - Заголовок авторизации не передается скрипту PHP

70
Rich

Это заняло у меня много времени, так как это не задокументировано в mod_proxy или mod_proxy_fcgi.

Добавьте следующую директиву к вашему Apache conf или .htaccess:

CGIPassAuth on

Смотрите здесь для деталей.

29
limos

Я не нашел подобных настроек с mod_proxy_fcgi, НО он просто работает для меня по умолчанию. Он запрашивает авторизацию пользователя (как обычно .htaccess), и php получает его, и работает как с mod_php или fastcgi и pass-header. Я не знаю, был ли я полезным ...

Правка: Он работает только на teszt.com/ при использовании DirectoryIndex ... Если я передаю имя файла php (даже если index.php!), Он просто не работает, не передавайте аутентификацию php. Это блокировщик для меня, но я не хочу переходить на Apache 2.2 (и mod_fastgi), поэтому я перехожу на nginx (на этой машине тоже).

0
DBLaci