mod_python per Apache
Si installa il pacchetto Debian libapache2-mod-python, quindi in un VirtualHost si abilita l'esecuzione del Python:
<Location /> SetHandler mod_python PythonPath "sys.path+['/etc/apache2/']" #PythonHandler mod_python.testhandler PythonHandler mptest PythonDebug On </Location>
Con SetHandler si dice di passare ogni richiesta al Python, se si desidera passare solo le richieste di file .py si può usare la direttiva AddHandler. L'handler predefinito è contenuto nel file /etc/apache2/mptest.py
, il cui percorso è stato aggiunto alla sys.path con la direttiva PythonPath. Eventuali errory Python saranno mostrati nel browser grazie alla direttiva PythonDebug.
Per verificare le impostazioni si può attivare provvisoriamente l'handler mod_python.testhandler
.
Questo è un esempio di handler mptest.py
:
from mod_python import apache def handler(req): req.content_type = 'text/plain' req.write("Hello World!") return apache.OK
Autenticazione con PythonAuthenHandler
Per delegare l'autenticazione Basic di Apache ad una procedura Python è possibile usare queste direttive:
<Location /pippo> AuthType Basic AuthName "Protetto con Python" AuthUserFile /dev/null AuthBasicAuthoritative Off PythonAuthenHandler authpippo Require valid-user </Location>
L'autenticazione su file AuthUserFile viene dichiarata non autoritativa, si aggiunge un handler Python che deve essere soddisfatto. Nell'esempio verrà eseguito il file authpippo.py
cercato nella sys.path. Ecco un esempio:
from mod_python import apache def authenhandler(req): pw = req.get_basic_auth_pw() user = req.user if user == "pippo" and pw == "pippo": return apache.OK else: return apache.HTTP_UNAUTHORIZED