Как использовать PHP-скрипт для управления доступом в Apache

Я ищу способ использовать PHP-скрипт для управления доступом к ресурсам в Apache. Я хочу иметь управление доступом, не зависящее от целевого ресурса; т.е. он будет работать для html, файлов, других скриптов и программ cgi, так же как директива «Разрешить от» или «Запретить от» - за исключением использования специальной логики.

Я рассмотрел несколько способов попытаться управлять этим:

  1. Используйте модуль apache, например mod_auth_script (хорошо, но этот модуль старый, и я предполагаю, что он плохо масштабируется)
  2. Используйте директиву FastCGI FastCgiAccessChecker
  3. Создайте свой собственный модуль 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-скрипт с помощью FastCgiAccessChecker.

Я пробовал различными способами попытаться передать имя скрипта Я хочу запустить, изменив имя файла в директивах FastCGIExternalServer и / или FastCgiAccessChecker - не работает. Я также пробовал запускать php-cgi со спецификатором скрипта, т.е.

php-cgi -q -b 192.168.0.11:9000 -f /var/www/html/thing/access.php &

Ничего не работает . Я могу сказать, что apache распознает мои директивы, вроде того, потому что, когда я включаю FastCgiAccessChecker, затем посещаю страницу php, тип содержимого изменяется на text / plain, и я теряю первые ~ 8000 байтов содержимого с обслуживаемой страницы, если это сценарий (нет идея почему). Но он не вызывает сценарий PHP, который я хочу запустить.

Насколько я могу понять, происходит то, что FastCgiAccessChecker предполагает, что указанный сервер fastcgi скомпилирован специально для работы в качестве средства проверки доступа. Невозможно указать серверу fastcgi (в моем случае PHP), какой скрипт запускать для проверки доступа.

Я искал в Интернете и, насколько я могу судить, никто никогда не пытался использовать PHP сценарий для этого раньше, или никто об этом не писал.

Итак, мой вопрос: что мне делать? Я вижу несколько возможностей:

1) Мне чего-то не хватает, и есть какой-то волшебный способ заставить FastCgiAccessChecker делать то, что я хочу: запустить скрипт PHP для управления контролем доступа apache

2) Я пишу свой собственный FastCGI сервер в c и встроить PHP, чтобы я мог указать сценарий PHP, который хочу запустить (я потратил несколько минут на изучение этого; он выглядит сложным и пугающим, и я не работал в c с 1995 года)

3 Я отказываюсь от FastCGI и пишу модуль apache для прямого вызова моего PHP-скрипта для управления доступом. (Также выглядит сложным; и этот метод потребовал бы создания нового процесса для каждого запроса на выполнение PHP.)

Есть ли у кого-нибудь совет, как заставить FastCGI делать то, что я хочу, или (разумно) простая альтернатива FastCGI?

Спасибо за все, что вы можете предложить

12
задан Achronos 19 August 2011 в 04:05
поделиться