Installation et configuration d'un serveur http apache 2.2

De Linux Server Wiki
Aller à la navigation Aller à la recherche

Ce howto a été écrit au départ pour debian etch puis a été adapté pour debian lenny. Il reste cependant valable la plupart du temps pour ces deux versions de debian.

Ce howto va vous montrer comment mettre en place un serveur web apache2 gérant les domaines virtuels et l'ipv6 sous debian lenny. Nous allons mettre en place trois sites : core.csnu.org, www.csnu.org et webmail.csnu.org. core.csnu.org sera le site par défaut sur lequel tombera toute personne effectuant une requête http ne désignant aucun autre domaine virtuel. www.csnu.org et webmail.csnu.org sont ce qu'on peut appeler des domaines virtuels : ils sont sur la même ip que core.csnu.org mais servent des domaines différents. Ces deux domaines disposeront d'un chiffrement ssl/tls actif.

Au niveau dns, core.csnu.org est le domaine identifiant la machine. Il possède l'adresse ipv4 213.186.47.110 et l'adresse ipv6 2001:41d0:1:d6e::127. www.csnu.org et webmail.csnu.org sont des alias pour core.csnu.org.

Les changements de permissions effectués dans ce howto supposent que vous êtes en umask 0027

Champs dns

La première étape est de mettre en place les champs dns pour les différents domaines qu'on va gérer. Éditez la zone dns de votre domaine (/srv/http/csnu.org.host dans mon cas) et ajoutez ou modifiez les lignes suivantes :

csnu.org.       IN      A       213.186.47.110
csnu.org.       IN      AAAA    2001:41d0:1:d6e::110
core.csnu.org.  IN      A       213.186.47.110
core.csnu.org.  IN      AAAA    2001:41d0:1:d6e::110
www             IN      CNAME   core.csnu.org.
webmail		IN	CNAME	core.csnu.org.

Si vous ne disposez pas d'ipv6, vous n'avez pas besoin des champs AAAA.

Installation de apache2

Utilisez aptitude pour installer apache2:

aptitude install apache2

Créez les dossier qui contiendront les vhosts et la configuration des sites :

mkdir /etc/apache2/vhosts
mkdir /etc/apache2/sites

Créez le dossier /srv/http/ qui contiendra les sites internet :

mkdir /srv/http/
chown root:www-data /srv/http/

Configuration de apache2

Voici un exemple de fichier apache2.conf. Nous verrons ensuite plus en détail les différentes directives de configuration utilisées.

ServerRoot /etc/apache2

Listen 213.186.47.110:80
Listen 213.186.47.110:443
Listen 127.0.0.1:80
Listen ::1:80
Listen 2001:41d0:1:d6e::110:80
Listen 2001:41d0:1:d6e::110:443

User www-data
Group www-data
PidFile /var/run/apache2.pid

ServerAdmin root@csnu.org
ServerName www.csnu.org:80

HostnameLookups Off

ServerTokens Prod

NameVirtualHost 213.186.47.110:80
NameVirtualHost 213.186.47.110:443
NameVirtualHost 2001:41d0:1:d6e::110:80
NameVirtualHost 2001:41d0:1:d6e::110:443

#NameVirtualHost 127.0.0.1:80

AcceptPathInfo On

KeepAlive On
KeepAliveTimeout 5
MaxKeepAliveRequests 100

<IfModule mpm_prefork_module>
   StartServers           2
   MinSpareServers       2
   MaxSpareServers      5
   MaxClients           40
   MaxRequestsPerChild 400
</IfModule>

#<IfModule mpm_worker_module>
#   StartServers           3
#   MaxClients           80
#   MinSpareThreads       3
#   MaxSpareThreads      6
#   ThreadsPerChild        0
#   MaxRequestsPerChild 200
#</IfModule>

Include /etc/apache2/mods-enabled/*.load
Include /etc/apache2/mods-enabled/*.conf

# PHPIniDir /etc/php5/apache2

AddHandler cgi-script .cgi .pl
DefaultLanguage fr
AddDefaultCharset UTF-8

DocumentRoot /srv/http/default/
#Sécurisation de php pour tous les vhosts/autres qui n'en ont pas de configuré
php_admin_value open_basedir /srv/http/default/

<Directory />
        Options Indexes FollowSymLinks
        AllowOverride All
        Order allow,deny
        Allow From All
	IndexIgnore .ht*
	IndexIgnore .svn
</Directory>

AccessFileName .htaccess
<FilesMatch "^\.ht">
	Order allow,deny
	Deny From All
	Satisfy All
</FilesMatch>

<DirectoryMatch "\.svn">
  Deny from all
</DirectoryMatch>

DirectoryIndex index.html index.htm index.php

ErrorLog /var/log/apache2/error.log
LogFormat "[%{%a %b %d %T %G}t] [access] %h %v %H %l %u \"%r\" %>s %b bytes = %D ms (%T s)" common
CustomLog /var/log/apache2/access.log common

TypesConfig /etc/mime.types
DefaultType text/plain

#################################################################
#			    Index				#
#################################################################
IndexOptions FancyIndexing VersionSort
<Directory "/usr/share/apache2/icons">
    Options Indexes MultiViews
    AllowOverride None
    Order allow,deny
    Allow from all
</Directory>

<Location /server-status>
 SetHandler server-status
 Order Deny,Allow
 Deny from all
 Allow from 127.0.0.1
 Allow from ::1
 Allow from 213.186.47.110
 Allow from 2001:41d0:1:d6e::110
</Location>
ExtendedStatus On

 #############################
 #           VHOSTS          #
 #############################

Include vhosts/core.csnu.org.conf.default
Include vhosts/csnu.org.conf.default
Include vhosts/*.conf
  • ServerRoot défini le dossier principal de apache2. C'est dans ce répertoire que les configurations de apache2 sont stockés.
  • User et group définissent l'utilisateur et le groupe sous lequel apache2 doit être lancé. Ces deux éléments (www-data dans les deux cas) ont normalement été créé automatiquement par aptitude.
  • PidFile défini l'endroit où le fichier pid de apache2 doit être stocké.
  • Listen défini les différentes ips et ports sur lesquels apache2 écoute.
  • NameVirtualHost défini les ips et les ports qui pourront être utilisés par la suite en tant que virtualhost (pour les domaines virtuels).
  • ServerAdmin défini le nom de la personne (en général une adresse email) que le serveur proposera de contacter en cas de problème lors de l'affichage d'une page ou d'un bug de configuration interne.
  • ServerName défini le nom du serveur.
  • HostnameLookups défini s'il faut résoudre l'ip des clients se connectant au serveur dans le but de loguer leur hostname dans les fichiers de logs. Il est préférable de désactiver cette option car apache2 ne servira pas la requête tant que la résolution n'aura pas eu lieu.
  • ServerTokens défini comment apache2 doit s'identifier auprès des clients.
    • ServerTokens Prod : Le serveur renvoi : Server: Apache
    • ServerTokens Major : Le serveur renvoi : Server: Apache/2
    • ServerTokens Minor : Le serveur renvoie : Server: Apache/2.2
    • ServerTokens Min : Le serveur renvoi : Server: Apache/2.2.41
    • ServerTokens OS : Le serveur renvoie : Server: Apache/2.2.41 (Unix)
    • ServerTokens Full (valeur par défaut) : Le serveur renvoi : Server: Apache/2.2.41 (Unix) PHP/4.2.2 MyMod/1.2
  • KeepAlive défini si apache2 doit autoriser les connexions tcp persistantes (plusieurs requêtes http pourront être envoyées lors de la même connexion tcp).
  • KeepAliveTimeout défini le nombre de secondes que doit attendre apache2 avant de fermer une connexion tcp.
  • MaxKeepAliveRequests défini le nombre de requêtes maximum que apache2 servira lors de la même connexion tcp. Il est recommandé de laisser cette valeur relativement élevée.
  • ErrorLog défini le fichier où les logs d'erreur de apache seront stockés.
  • LogFormat permet de formater les logs customs du serveur. La documentation officielle de apache détaille le formatage possible. La syntaxe est LogFormat Format Type
  • CustomLog permet de spécifier un fichier de log pour chaque type de log custom.
  • AddDefaultCharset permet de spécifier le charset par défaut à utiliser.
  • AddHandler cgi-script permet de préciser que les fichiers .cgi et .pl sont des scripts cgi.
  • DocumentRoot défini le répertoire où sont stockés les pages webs par défaut du serveur.
  • DirectoryIndex défini les fichiers qui seront considérés comme des pages d'index.
  • TypesConfig défini le fichier spécifiant la correspondance entre les extensions et les types de fichiers.
  • DefaultType défini le type par défaut d'un fichier si son extension n'est pas spécifié par TypesConfig

La directive Directory permet d'appliquer des directives qui ne s'appliqueront que pour un dossier donné (et tout ses sous dossiers et fichiers). Dans l'exemple suivant, on applique des règles pour l'ensemble du système de fichier (/) :

<Directory />
        Options Indexes FollowSymLinks
        AllowOverride All
        Order allow,deny
        Allow From All
        IndexIgnore .ht*
</Directory>

Les lignes suivantes permettent de charger automatiquement tous les modules que vous avez activé pour apache au moyen de la commande a2enmod :

Include /etc/apache2/mods-enabled/*.load
Include /etc/apache2/mods-enabled/*.conf