Я ищу способ использования PHP script для управления доступом к ресурсам в Apache. Я хочу иметь контроль доступа, который не зависит от целевого ресурса; то есть он будет работать для html, файлов, других скриптов и cgi-программ, так же, как и директива "Разрешить" или "Отказать", кроме использования пользовательской логики.
Я рассмотрел несколько способов, чтобы попытаться справиться с этим:
- Используйте модуль apache, например mod_auth_script (ok, но этот модуль старый, и я предполагаю, что он не масштабируется)
- Используйте FastCGI-директиву FastCgiAccessChecker
- Создайте мой собственный модуль apache для вызова php и сделайте все, что мне нужно
Из них №2 выглядели наиболее перспективными, а также самыми портативными, учитывая популярность FastCGI. Итак, мне удалось поменять обычный модуль php linux и получить php, работая через fastcgi. Это было сложнее, чем в Windows, но в конечном итоге оно работало как внешний сервер, то есть с помощью директивы Apache
FastCGIExternalServer /var/www/html/thing -host 192.168.0.11:9000
и запуск php-демона
php-cgi -q -b 192.168.0.11:9000 &
Проблема заключалась в попытке найти способ вызвать PHP script с помощью FastCgiAccessChecker.
Я пробовал различные способы попробовать передать имя script, которое я хочу запустить, изменив имя файла в FastCGIExternalServer и/или директивы FastCgiAccessChecker - не работает. Я также попытался запустить php-cgi с помощью спецификатора script, т.е.
php-cgi -q -b 192.168.0.11:9000 -f /var/www/html/thing/access.php &
Ничего не работает. Я могу сказать, что apache распознает мои директивы, вроде, потому что, когда я включаю FastCgiAccessChecker, перейдите на страницу php, изменения типа контента в text/plain и я потеряю первые ~ 8000 байт содержимого с страницы, если она script (не знаю, почему). Но он не вызывает PHP скрипт, который я хочу запустить.
Насколько я могу судить, происходит то, что FastCgiAccessChecker предполагает, что указанный сервер fastcgi скомпилирован специально для работы в качестве проверки доступа. Невозможно сказать сервер fastcgi (PHP в моем случае), что script для выполнения проверки доступа.
Я искал в Интернете, и насколько я могу судить, никто никогда не пытался использовать PHP script для этого раньше, или никто не написал об этом.
Итак, мой вопрос: что мне делать? Я вижу несколько возможностей:
1) Я что-то упустил, и есть волшебный способ сделать FastCgiAccessChecker делать то, что я хочу: запустить PHP script для управления доступом к apache
2) Я пишу собственный FastCGI-сервер в c и внедряю PHP, поэтому я могу указать PHP script, который я хочу запустить (я потратил несколько минут на это, это выглядит сложным и страшным, а я "Работал в c с 1995 года".
3) Я отказываюсь от FastCGI и пишу модуль apache для прямого вызова моего PHP script для контроля доступа. (Также выглядит сложным, и этот метод потребует создания нового процесса для каждого запроса для exec PHP.)
Есть ли у кого-нибудь совет, как заставить FastCGI делать то, что я хочу, или (разумно) простая альтернатива FastCGI?
Спасибо за все, что вы можете предложить