[Présentation | Installation d'Apache | Installation de PHP4 | Présentation de l'arborescence d'Apache  | Le fichier de configuration ]

Dernière modification 7 mars 2007

Apache 2.2.4 + PHP5.2.1+ MySQL 5.0.33

Configuration réseau

(Ce guide peut être téléchargé dans la section téléchargement)


Présentation

Cette page présente l'installation et la configuration d'Apache 2 avec gestion de PHP et MySQL, elle est basée sur la compilation complète de ces applications par conséquent elle devrait convenir pour toutes les distributions de linux.

Vous devez récupérer préalablement les sources d' Apache à l'URL www.apache.org , on récupère ensuite PHP à l'URL http://www.php.net /,  et enfin MySQL , à l'URL www.mysql.com 

Pour l'installation de MySQL reportez vous à la page Apache 1.3.37+PHP 5.2.1+MySQL 5.0.33

Pour la configuration du lancement automatique d'Apache, des pages webs utilisateur, des alias, des pages protégées, des hôtes virtuels, des scripts CGI, de la gestion de MySQL (avec installation phpMyAdmin) et de LDAP, reportez vous à la page Apache 1.3.37+PHP 5.2.1+MySQL 5.0.33
 

[retour haut de la page]

Installation d'Apache

Pour Apache, on désarchive en tapant:

tar xvfz httpd-2.2.4.tar.gz

Cela va créer le répertoire httpd-2.2.4. Avant d'aller plus loin, si Apache est déjà installé sur votre système on va le supprimer, on va d'abord supprimer les modules PHP, pour vérifier :

rpm -qa | grep -i php

Si vous obtenez par exemple

php-gd-version
php-ldap-version
mod_php-version
php-common-version
php-version

On supprime en tapant rpm -e nom-du-package

Maintenant on va supprimer Apache, pour vérifier s'il est présent :

rpm -qa | grep -i apache

Si on obtient par exemple

apache-version
apache-conf-version
apache-modules-version
apache-common-version

Supprimez les. Il est possible que pour des raisons de dépendances que vous ayez un refus de désinstallation, ce n'est pas grave, l'important est que le  package apache-version soit au moins supprimé pour qu'il n'y ait pas de conflit.

Supprimez éventuellement les répertoires suivants /var/www, /var/log/httpd et /etc/httpd

Dans le répertoire d'Apache httpd-2.2.4 , on tape alors:

./configure --prefix=/usr/local/apache2 --enable-module=most --enable-shared=max

Par prefix on indique que les répertoires d'Apache contenant entre autre le fichier de conf se trouveront sous /usr/local/apache2 c'est utile dans le cas où vous voulez faire coexister deux versions d'Apache sur votre système.
J'ai du préalablement installer le package db2-devel, on tape maintenant:

make

Et enfin en tant que root:

make install

Rajoutez la ligne /usr/local/apache2/lib dans le fichier /etc/ld.so.conf puis tapez

ldconfig

Pour lancer maintenant Apache, il faut taper:

/usr/local/apache2/bin/apachectl start

Maintenant votre navigateur préféré dans le champ URL taper http://localhost ou http://nomdelamachine et là la page d'accueil d'Apache apparaît, pour info celle-ci se trouve sous /usr/local/apache2/htdocs.

NOTE Si vous upgradez d'une ancienne version, vos fichiers de conf ne seront pas écrasés.

Pour un lancement automatique sous Mandriva

Pour un lancement automatique on prendra le fichier apachectl se trouvant sous /usr/local/apache2/bin et on le placera sous /etc/rc.d/init.d, et on le renommera httpd2

cp /usr/local/apache2/bin/apachectl /etc/rc.d/init.d/httpd2

On rajoutera en début de fichier juste après #!/bin/sh

#!/bin/sh

# Startup script for the Apache Web Server
#
# chkconfig: 345 85 15
# description: Apache is a World Wide Web server.  It is used to serve \
#              HTML files and CGI.
# processname: httpd

Pour un lancement automatique à l'état de marche 3,4 et 5 on doit normalement taper:

chkconfig --level 345 httpd2 on

Et pour un arrêt à l'état de marche 0, 1, 2 et 6

chkconfig --level 0126 httpd2 off

Pour lancer le serveur, il suffira maintenant de taper:

/etc/rc.d/init.d/httpd2 start

Pour un lancement automatique sous Ubuntu

Voilà un script de lancement, il faut l'appeler httpd2 et le placer sous /etc/init.d

#!/bin/bash
#
# apache    Start the apache2 HTTP server.
#
# The variables below are NOT to be changed.  They are there to make the
# script more readable.

NAME=apache
DAEMON=/usr/local/apache2/bin/httpd
PIDFILE=/usr/local/apache2/logs/httpd.pid
CONF=/usr/local/apache2/conf/httpd.conf
APACHECTL=/usr/local/apache2/bin/${NAME}ctl
# note: SSD is required only at startup of the daemon.
SSD=`which start-stop-daemon`
ENV="env -i LANG=C PATH=/bin:/usr/bin:/usr/local/bin"

trap "" 1

# Check that we're not being started by inetd
if egrep -q -i "^[[:space:]]*ServerType[[:space:]]+inet" $CONF
then
    exit 0
fi

test_config() {
    if [ ! -x $APACHECTL ]; then
    echo "$APACHECTL is not executable, exiting"
    exit 0
    fi

    # ensure we don't leak environment vars into apachectl
    APACHECTL="$ENV $APACHECTL"

    if ! $APACHECTL configtest 2> /dev/null
    then
        printf "Configuration syntax error detected. Not reloading.\n\n"
        $APACHECTL configtest
        exit 1
    fi
}

should_start() {
    if [ ! -x $DAEMON ]; then
    echo "apache is not executable, not starting"
    exit 0
    fi
}

case "$1" in
  start)
    should_start
    test_config
    echo -n "Starting web server: $NAME"
    $ENV $SSD --start --pidfile $PIDFILE --exec $DAEMON > /dev/null
    ;;

  stop)
    echo -n "Stopping web server: $NAME"
    start-stop-daemon --stop --pidfile $PIDFILE --oknodo
    rm -rf /var/lib/apache/mod-bandwidth/link/*
    ;;

  reload | force-reload)
    test_config
    echo -n "Reloading $NAME configuration"
    start-stop-daemon --stop --pidfile $PIDFILE --signal USR1
    ;;

  restart)
    test_config
    echo -n "Restarting $NAME"
    if ! start-stop-daemon -q --stop --pidfile $PIDFILE --signal HUP; then
    $ENV $SSD --start --pidfile $PIDFILE --exec $DAEMON > /dev/null
    fi
    ;;

  *)
    echo "Usage: /etc/init.d/$NAME {start|stop|reload|force-reload|restart}"
    exit 1
    ;;
esac

if [ $? -eq 0 ]; then
    echo .
    exit 0
else
    echo " failed"
    exit 1
fi

On donne les droits d'exécution

chmod 755 /etc/init.d/httpd2

Pour le lancer automatique au démarrage il faudra taper

update-rc.d httpd2 defaults

[retour haut de la page]

Installation de PHP

Pour PHP, on tapera d'abord

tar xvfz php-5.2.1.tar.gz

Cela va créer un répertoire php-5.2.1. A présent dans ce répertoire on tape:

./configure --with-apxs2=/usr/local/apache2/bin/apxs --with-config-file-path=/usr/local/apache2/conf --enable-versioning --with-mysql --with-ftp  --enable-bcmath=yes --enable-debug=no --enable-memory-limit=yes   --enable-tracks-vars  --with-gd --with-zlib  --with-kerberos  --enable-mbstring --with-mcrypt

Notes - Vous avez besoin du package flex contenant lex

            -  les options--with-gd --with-zlib  --with-kerberos sont utiles pour l'utilisation des mods freeplayer de la freebox

            -  les options --enable-mbstring --with-mcrypt sont nécessaires pour phpMyAdmin elles requièrent l'installation des packages libmcrypt-dev et mcrypt
    

Taper ensuite:

make

Puis en tant que root

make install

Cette dernière commande va installer le module PHP sous /usr/local/apache2/modules et modifier le fichier httpd.conf en rajoutant

LoadModule php5_module        modules/libphp5.so

Dans le cas d'une ancienne installation avec PHP4, pensez à mettre en commentaire la ligne suivante pour éviter les conflits

LoadModule php4_module        modules/libphp4.so

On modifiera maintenant manuellement le fichier httpd.conf pour qu'Apache prenne en compte PHP, à la suite des lignes

AddType application/x-compress .Z
AddType application/x-gzip .gz .tgz

On rajoute

AddType application/x-httpd-php .php .php .php4 .phtml
AddType application/x-httpd-php-source .phps

Par ailleurs à la ligne

DirectoryIndex index.html index.html.var

On rajoutera

DirectoryIndex index.html index.htm index.php index.php index.php4

A présent on va copier le fichier php.ini-dist se trouvant dans le répertoire de PHP php-5.2.1 pour le mettre sous /usr/local/apache2/conf et en le renommant php.ini

cp ./php-5.2.1/php.ini-dist /usr/local/apache2/conf/php.ini

Dans le cas d'une ancienne installation de php, vous avez tout intérêt à repartir du nouveau fichier php-dist.ini fourni et de le remodifier.
Dans le répertoire /usr/local/apache/htdocs on trouve les fichiers qui seront accessibles à partir de la page d'accueil de votre serveur Apache. On doit cependant renommer le fichier suivant.

mv index.html.fr index.html

On relance Apache

/usr/local/apache2/bin/apachectl restart

Créer maintenant le fichier infophp.php contenant

<?
phpinfo();
?>

Que vous placerez sous /usr/local/apache2/htdocs, dans l'URL de votre navigateur préféré, taper http://localhost/infophp.php ou http://nommachine/infophp.php et là magique devrait s'afficher des info sur la configuration de PHP sur votre système.


ATTENTION Si comme moi vous utilisez des URL du style http://www.funix.org/fr/linux/main-linux.php?ref=apache&page=menu c'est à dire avec passage d'arguments cela risque de ne pas marcher, pour plus d'info voir ici.

[retour haut de la page]

Présentation de l'arborescence d'Apache

L'installation va créer un répertoire /usr/local/apache2  contenant:
- répertoire bin contient les exécutables d'Apache
- répertoire cgi-bin contient les scripts CGI
- répertoire error contient les messages d'erreur dans de multiples langues, la langue est choisie en fonction de la configuration du navigateur. Les messages sont entièrement configurables.
- répertoire lib contient des bibliothèques
- répertoire build
- répertoire conf contient les fichiers de configuration d'Apache
- répertoire htdocs contient la page d'accueil d'Apache
- répertoire icons contient des icônes qui servent notamment pour identifier les types de fichier.
- répertoire include contient les includes d'Apache
- répertoire modules contient les modules d'Apache
- répertoire logs contient les fichiers de log d'Apache
- répertoire man contient les mans d'Apache

Le répertoire de log contient essentiellement deux fichiers:
- access_log listant les accès au serveur
- error_log listant les erreurs en tout genre

Le répertoire de modules modules contient  les modules utilisables par Apache, pour info un module est une extension logicielle à Apache, lui permettant par exemple d'interpréter le PHP (module libphp5.so). Ce ne sont que les modules chargés dynamiquement qui sont dans ce répertoire.

Le répertoire /usr/local/apache2/conf contient:
- le fichier de configuration d'Apache http.conf
- mime.types fixe le type de fichier suivant l'extension du dit fichier (.doc=msword, .ps=postscript, ...), ça permet au client qui se connecte sur le serveur, de savoir comment interpréter le fichier suivant son extension.
- magic sert pour le module mod_mime_magic

Vous trouverz également le fichier de config en cas de serveur sécurisé SSL.
-ssl.conf
-ssl-std.conf

Et des fichiers de conf pour une configuration optimisée haute performance
- highperformance.conf
- highperformance-std.conf
 
 

[retour haut de la page]

Le fichier de configuration

Le fichier de conf d'Apache se trouve sous /usr/local/apache2 et se nomme httpd.conf, voici les points que je juge important dans le fichier:

(...)

# Répertoire racine d'Apache
ServerRoot "/usr/local/apache"

(...)

#
# Timeout: The number of seconds before receives and sends time out.
#
# définition du timeout
Timeout 300

# nombre de serveurs à lancer au départ et d'instances à lancer
# prefork MPM
# StartServers: number of server processes to start
# MinSpareServers: minimum number of server processes which are kept spare
# MaxSpareServers: maximum number of server processes which are kept spare
# MaxClients: maximum number of server processes allowed to start
# MaxRequestsPerChild: maximum number of requests a server process serves
<IfModule prefork.c>
StartServers         5
MinSpareServers      5
MaxSpareServers     10
MaxClients         150
MaxRequestsPerChild  0
</IfModule>

# worker MPM
# StartServers: initial number of server processes to start
# MaxClients: maximum number of simultaneous client connections
# MinSpareThreads: minimum number of worker threads which are kept spare
# MaxSpareThreads: maximum number of worker threads which are kept spare
# ThreadsPerChild: constant number of worker threads in each server process
# MaxRequestsPerChild: maximum number of requests a server process serves
<IfModule worker.c>
StartServers         2
MaxClients         150
MinSpareThreads     25
MaxSpareThreads     75
ThreadsPerChild     25
MaxRequestsPerChild  0
</IfModule>

(...)

# définition de l'adresse IP du port du serveur
# Listen: Allows you to bind Apache to specific IP addresses and/or
# ports, in addition to the default. See also the <VirtualHost>
# directive.
#
# Change this to Listen on specific IP addresses as shown below to
# prevent Apache from glomming onto all bound IP addresses (0.0.0.0)
#
#Listen 12.34.56.78:80
# avec un deuxième serveur apache, vous pouvez indiquer un port 8080
# dans l'url du navigateur il faudra mettre http://url:8080

Listen 80

(...)

# On lance initialement httpd en tant que root, puis immédiatement
# c'est l'utilisateur nobody (groupe nobody) qui en devient le proprio
# ainsi s'il y a une faille dans Apache, le hacker au lieu de devenir root
# devient nobody avec les droits qui vont avec
# pour vérifier que nobody est bien le proprio
# ps aux | grep httpd

User nobody
Group #-1

# ServerAdmin: Your address, where problems with the server should be
# e-mailed.  This address appears on some server-generated pages, such
# as error documents.
# En cas de problème un email sera envoyé au webmaster, mettez donc
# ici l'adresse email du webmaster
ServerAdmin olivier@asterix.kervao.fr

(...)

# DocumentRoot: The directory out of which you will serve your
# documents. By default, all requests are taken from this directory, but
# symbolic links and aliases may be used to point to other locations.
# C'est dans ce répertoire qu'on va trouver la page d'accueil d'Apache
DocumentRoot "/usr/local/apache/htdocs"

(...)

# UserDir: The name of the directory which is appended onto a user's home
# directory if a ~user request is received.
# Chaque utilisateur pourra mettre ses pages dans sa homedirectory
# dans un répertoire public_html, les pages seront accessibles à l'URL

UserDir public_html

(...)

# Définition des fichiers d'entrée
DirectoryIndex index.html index.html.var index.htm index.php index.php index.php4

# défintion des fichiers de protection des pages
AccessFileName .htaccess

(...)

# nom du fichier d'erreur
ErrorLog logs/error_log

# niveau de log
# LogLevel: Control the number of messages logged to the error_log.
# Possible values include: debug, info, notice, warn, error, crit,
# alert, emerg.
#
LogLevel warn

(...)

# ordre de préférence des langues
# LanguagePriority allows you to give precedence to some languages
# in case of a tie during content negotiation.
#
# Just list the languages in decreasing order of preference. We have
# more or less alphabetized them here. You probably want to change this.
#
LanguagePriority fr en da nl et de el it ja kr no pl pt pt-br ltz ca es sv tw

Dans l'hypothèse où vous utilisez deux serveurs Apache (versions 1.3 et 2 par exemple), vous pouvez spécifier le port 80 pour Apache 1.3 et le port 8080 pour Apache 2 en fixant dans le fichier de configuration Listen à 8080. Au niveau de la déclaration des hôtes virtuels il faudra mettre quelque chose comme ça

NameVirtualHost 192.168.13.11:8080

<VirtualHost 192.168.13.11:8080>
ServerName tosh.kervao.fr
DocumentRoot /usr/local/apache2/htdocs
ErrorLog logs/tosh-error_log
TransferLog logs/tosh-access_log
</VirtualHost> 

 
[Retour page d'accueil FUNIX] [retour haut de la page ]