Sto cercando un modo per utilizzare uno script PHP per controllare l'accesso alle risorse in Apache. Voglio avere il controllo di accesso che non dipende dalla risorsa di destinazione; cioè funzionerà per html, file, altri script e programmi cgi, proprio come farebbe una direttiva "Consenti da" o "Nega da" - eccetto l'uso della logica personalizzata.Come utilizzare lo script PHP per il controllo degli accessi in Apache
Ho guardato diversi modi per cercare di gestire questo:
- Usare un modulo di Apache come mod_auth_script (ok ma questo modulo è vecchio e presumo non scala bene) direttiva
- Usa FastCGI FastCgiAccessChecker
- creare il mio modulo Apache per invocare php e fare tutto ciò che ho bisogno
di questi 2 # sembrava più promettente, e anche più portatile data la popolarità di FastCG IO. Quindi, sono riuscito a sostituire il solito modulo linux di php e far funzionare php tramite fastcgi. E 'stato più difficile di quanto su Windows, ma ha a lavorare alla fine come un server esterno, vale a dire utilizzando la direttiva di Apache
FastCGIExternalServer /var/www/html/thing -host 192.168.0.11:9000
e partendo php daemon
php-cgi -q -b 192.168.0.11:9000 &
Il problema è venuto nel tentativo di trovare un modo per richiamare uno script PHP usando FastCgiAccessChecker.
Ho provato vari modi per provare a passare il nome dello script che voglio eseguire cambiando il nome del file nelle direttive FastCGIExternalServer e/o FastCgiAccessChecker - non funziona. Ho anche provato a partire php-cgi con un identificatore di sceneggiatura, vale a dire
php-cgi -q -b 192.168.0.11:9000 -f /var/www/html/thing/access.php &
Niente funziona. Posso dire apache riconosce le mie direttive, in qualche modo, perché quando includo FastCgiAccessChecker quindi visita una pagina php, le modifiche del tipo di contenuto in text/plain e perdo i primi ~ 8000 byte di contenuto dalla pagina pubblicata se è uno script (no idea perché). Ma non chiama lo script PHP che voglio eseguire.
Per quanto posso immaginare, ciò che sta accadendo è che FastCgiAccessChecker presuppone che il server FastCgi specificato sia compilato appositamente per fungere da controllo degli accessi. Non c'è modo di dire al server fastcgi (PHP nel mio caso) quale script eseguire per fare il controllo dell'accesso.
Ho cercato nel web e per quanto posso dire nessuno ha mai provato a utilizzare uno script PHP per questo prima, o nessuno ha scritto su di esso.
Quindi la mia domanda: cosa dovrei fare? riesco a vedere un paio di possibilità:
1) mi manca qualcosa, e c'è qualche modo magico per fare FastCgiAccessChecker fare quello che voglio: eseguire uno script PHP per il controllo di controllo di accesso apache
2) Scrivo il mio server FastCGI in c e incorpora PHP, quindi posso specificare lo script PHP che voglio eseguire (ho passato alcuni minuti a guardarlo, sembra complicato e spaventoso, e non lavoro in c dal 1995)
3) Mi arrendo su FastCGI e scrivo un modulo apache per chiamare direttamente il mio script PHP per controllare l'accesso. (Sembra anche complicato e questa tecnica richiederebbe la creazione di un nuovo processo per ogni richiesta di esecuzione PHP.)
Qualcuno ha qualche consiglio, sia su come ottenere FastCGI per fare ciò che voglio, sia su (ragionevolmente) semplice alternativa a FastCGI?
Grazie per tutto ciò che potete suggerire
Mi piace questa soluzione! – Achronos