[Apache] Mise en place de WSGI
Vous souhaitez exécuter du Python au travers de Apache, ceci est possible avec WSGI. Le principe est le même qu’avec PERL, le but est de renvoyer au navigateur ce qu’il attend i.e. une page Web.
Installation des modules nécessaires
sudo apt-get install apache2 apache2-utils ssl-cert libapache2-mod-wsgi-py3 -y
Autoriser l’exécution des scripts wsgi
a2enmod wsgi
systemctl apache2 restart
Alias permettant l’exécution d’un script
La documentation de référence indique de mettre cet alias au niveau de la configuration du serveur ou du virtualhost (référence) et non comme je l’ai trouvé sur Internet dans la configuration du module.
J’ai activé par défaut le ssl donc, éditer /etc/apache2/sites-enabled/default-ssl.conf et ajouter la ligne suivante :
WSGIScriptAlias /wsgi /var/www/wsgi-scripts/wsgi.py
Relancer Apache :
systemctl apache2 restart
Exemple de fichier pour démonstration : /var/www/wsgi-scripts/wsgi.py
def application(environ,start_response):
status = '200 OK'
html = '<html>\n' \
'<body>\n' \
'<div style="width: 100%; font-size: 40px; font-weight: bold; text-align: center;">\n' \
'Welcome to Apache with mod_wsgi \n' \
'</div>\n' \
'</body>\n' \
'</html>\n'
response_headers = [('Content-type','text/html'),('Content-Length', str(len(html)))]
start_response(status,response_headers)
return [html.encode('UTF-8')]
L’ouverture du navigateur sur la page https://localhost/wsgi permettra l’exécution du script Python qui a été pointé.
Alias permettant l’exécution de scripts
Comme indiqué dans la documentation de référence, WSGIScriptAlias permet de pointer vers un répertoire sur lequel nous allons pouvoir exécuter les scripts.
Dans le fichier /etc/apache2/sites-enabled/default-ssl.conf et modifier la la ligne précédente en :
WSGIScriptAlias /wsgi /var/www/wsgi-scripts/wsgi.py
On remarquera l’ajout dans l’URL du script à exécuter.
Mise en application dans un éditeur d’entête mail
Pour la démonstration, nous allons utiliser le source GitHub de https://github.com/cyberdefenders/email-header-analyzer. Ce programme est fonctionnel et peut être exécuté directement au travers de Flask ou avec l’outil gunicorn.
Le programme server.py est renommer en mha.py et l’ensemble des dépendances à ce programme disposé au niveau du répertoire /var/www/wsgi-scripts/.
Il reste donc à créer une interface wsgi pour appeler cet applet Python, pour se faire nous allons créer un fichier "mha.wsgi" contenant les éléments suivants :
#!/usr/bin/python3
import logging
import sys
logging.basicConfig(stream=sys.stderr)
sys.path.insert(0, '/var/www/wsgi-scripts/')
from mha import app as application
Une ligne primordiale est "sys.path.insert(0, ’/var/www/wsgi-scripts/’)" qui va permettre d’aller cherche notre module mha dans le répertoire /var/www/wsgi-scripts/.
Il ne reste plus qu’à modifier le fichier de configuration de Apache en y rajoutant la ligne associée à l’exécution du wsgi.
WSGIScriptAlias /wsgi /var/www/wsgi-scripts/mha.wsgi
Accueil > Notes Techniques > Applications Web > [Apache] Mise en place de WSGI