Подтвердить что ты не робот

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

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

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

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

Настройка работает отлично, за исключением одной вещи: APC в комплекте apc.php, используемый для контроля состояния APC, не позволяет мне войти (требуется для просмотра записей пользовательского кэша). Когда я нажимаю "Записи пользовательского кеша", чтобы увидеть пользовательский кеш, он просит меня войти в систему, нажатие на кнопку входа в систему отображает обычную форму входа в систему, но ввод правильного входа и пароля не дает успеха. Эта функция отлично работает при работе с 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?

4b9b3361

Ответ 1

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

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

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

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

Ответ 2

Мне потребовалось много времени, чтобы взломать, поскольку он не документирован в mod_proxy или mod_proxy_fcgi.

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

CGIPassAuth on

Подробнее см. здесь.

Ответ 3

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

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