================ Apache CGI HOWTO (c) Nicolas Kovacs ================ Dernière révision : 16 janvier 2017 Ce HOWTO décrit la gestion du contenu dynamique basé sur CGI avec Apache sur une machine tournant sous Slackware Linux. Introduction ------------ CGI ("Common Gateway Interface") est une manière simple d'ajouter du contenu dynamique à un site web. Apache doit être configuré pour autoriser l'exécution des programmes CGI. Configuration ------------- Éditer '/etc/httpd/httpd.conf' et décommenter la ligne relative au chargement du module 'mod_cgi' : --8<---------- /etc/httpd/httpd.conf ----------------------------------------- ... LoadModule cgid_module lib64/httpd/modules/mod_cgid.so ... --8<-------------------------------------------------------------------------- Redémarrer Apache pour prendre en compte le chargement du module : # /etc/rc.d/rc.httpd restart La directive 'ScriptAlias' indique à Apache qu'un répertoire particulier est dédié aux programmes CGI. Apache considérera que tout fichier situé dans ce répertoire est un programme CGI et tentera de l'exécuter lorsque cette ressource fera l'objet d'une requête client : --8<---------- /etc/httpd/httpd.conf ----------------------------------------- ... ScriptAlias /cgi-bin/ "/srv/httpd/cgi-bin/" ... --8<-------------------------------------------------------------------------- Régler les permissions : # chown -R apache:apache /var/www/cgi-bin Le répertoire 'cgi-bin' contient un fichier 'test-cgi'. Pour l'utiliser, il faut d'abord indiquer l'interpréteur correct, en éditant la première ligne comme ceci : --8<-------------------------------------------------------------------------- #!/bin/sh ... --8<-------------------------------------------------------------------------- Activer le script : # chmod 0750 test-cgi Afficher la page du script : # links http://localhost/cgi-bin/test-cgi CGI/1.0 test script report: argc is 0. argv is . SERVER_SOFTWARE = Apache/2.4.25 (Unix) SERVER_NAME = localhost GATEWAY_INTERFACE = CGI/1.1 SERVER_PROTOCOL = HTTP/1.0 SERVER_PORT = 80 REQUEST_METHOD = GET ... Sur la machine publique, on ouvrira le script CGI comme ceci : * http://195.154.65.130/cgi-bin/test-cgi * http://slackbox.fr/cgi-bin/test-cgi Utiliser CGI avec les hôtes virtuels ------------------------------------ Créer un répertoire 'cgi-bin' au même niveau que 'htdocs', comme ceci : # tree -d /var/www/vhosts/default/ /var/www/vhosts/default/ |-- cgi-bin `-- htdocs 2 directories Copier le script 'test-cgi' dans ce répertoire : # cp -v /var/www/cgi-bin/test-cgi default/cgi-bin/ « /var/www/cgi-bin/test-cgi » -> « default/cgi-bin/test-cgi » Ensuite, ajouter une ligne dans la stance correspondante de '/etc/httpd/extra/httpd-vhosts.conf' : --8<---------- /etc/httpd/extra/httpd-vhosts.conf ---------------------------- ... ServerAdmin info@microlinux.fr DocumentRoot "/srv/httpd/vhosts/default/htdocs" ServerName nestor.microlinux.lan ServerAlias nestor ScriptAlias /cgi-bin/ /srv/httpd/vhosts/default/cgi-bin/ --> ajouter ErrorLog "/var/log/httpd/default-error_log" CustomLog "/var/log/httpd/default-access_log" common ... --8<-------------------------------------------------------------------------- Redémarrer Apache et ouvrir la page suivante : * http://nestor/cgi-bin/test-cgi Héberger des sites dynamiques avec PHP -------------------------------------- Activer le module PHP dans '/etc/httpd/httpd.conf' : --8<---------- /etc/httpd/httpd.conf ----------------------------------------- ... # Uncomment the following line to enable PHP: # Include /etc/httpd/mod_php.conf ... --8<-------------------------------------------------------------------------- La directive 'DirectoryIndex' définit le fichier qui sera affiché lorsqu'un répertoire est requis. On ajoutera les fichiers 'index.php', et on pourra également compléter par 'index.htm', une extension que l'on rencontre rarement, mais qui existe : --8<---------- /etc/httpd/httpd.conf ----------------------------------------- ... DirectoryIndex index.html index.htm index.php ... --8<-------------------------------------------------------------------------- Redémarrer Apache pour prendre en compte les modifications. Ajouter une section pour afficher les infos PHP : # cd /var/www/vhosts # mkdir phpinfo/htdocs Dans ce répertoire, éditer un fichier 'index.php' comme ceci : --8<---------- index.php ----------------------------------------------------- --8<-------------------------------------------------------------------------- Régler les droits d'accès : # chown -R apache:apache /var/www/vhosts/phpinfo Créer un hôte virtuel 'phpinfo.nestor' (cf. ci-dessus) et afficher la page 'index.php' dans un navigateur. Le fichier '/etc/httpd/php.ini' contient la configuration de PHP. On peut commencer par définir le fuseau horaire du serveur, nécessaire pour le bon fonctionnement de certaines applications : --8<---------- /etc/httpd/php.ini -------------------------------------------- [Date] ; Defines the default timezone used by the date functions ; http://php.net/date.timezone date.timezone = Europe/Paris <-- décommenter et définir le fuseau horaire --8<-------------------------------------------------------------------------- Redémarrer Apache et vérifier les donnés correspondantes dans la page qui affiche les infos PHP. Utiliser MySQL à partir de PHP ------------------------------ Voir le HOWTO sur MySQL pour le serveur de bases de données. Si MySQL est installé sur la machine, il est utilisable à partir de PHP sans autre configuration. Le protocole HTTPS ------------------ Voir le HOWTO consacré à Apache et SSL. ------------------------------------------------------------------------------ # vim: syntax=txt