Я ищу способ использования PHP-скрипта для управления доступом к ресурсам в Apache. Я хочу иметь контроль доступа, который не зависит от целевого ресурса; то есть он будет работать для html, файлов, других сценариев и программ cgi, так же, как это делали бы директивы «Разрешить из» или «Запретить из» - за исключением использования собственной логики.
Я рассмотрел несколько способов справиться с этим:
- Используйте модуль apache, такой как mod_auth_script (хорошо, но этот модуль старый, и я предполагаю, что он плохо масштабируется)
- Использовать директиву 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 с использованием 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, который я хочу запустить (я потратил несколько минут на изучение этого вопроса, он выглядит сложным и страшным, и я не работал в ц с 1995 г.)
3) Я отказываюсь от FastCGI и пишу модуль apache, чтобы напрямую вызывать мой PHP-скрипт для контроля доступа. (Также выглядит сложным; и этот метод потребует нового процесса для каждого запроса на выполнение PHP.)
Есть ли у кого-нибудь совет, как заставить FastCGI делать то, что я хочу, или (разумно) простую альтернативу FastCGI?
Спасибо за все, что вы можете предложить