[[apache2]]
Piste: » apache2
Serveur HTTP Apache 2
Cette page présente un cas concret de configuration d'un serveur HTTP Apache. À vous de l'adapter à vos besoins.
Elle est une fusion :
- du cours sur apache du canal IRC #ubuntu-fr-classroom ;
- de securiser_apache2 ;
- de diverses autres recherches sur le site de la documentation Apache
Des liens vers securiser_apache2_avec_ssl, virtualhosts_avec_apache2 et d'autres documentations seront donnés au moment opportun.
Pré-requis
- des connaissances de base des protocoles HTTP, DNS et TCP/IP (adressage, sous-réseaux, etc.) ;
- d'un réseau local en état de marche (IP attribuées, connexion à internet) ;
- d'un serveur DNS configuré (pour le domaine).
Introduction : HTTP
Qu'est-ce que le Web ?
Le Web est, de manière simple, un réseau composé de l'ensemble des sites Internet disponibles publiquement. Ils sont reliés entre eux par des hyperliens. Un site Internet (ou site Web) est quant à lui un ensemble de pages Web, liées entre elles.
Un site web a une adresse, comme celle du site Ubuntu-fr : http://ubuntu-fr.org. La page Web principale de ce site propose des liens hypertextes vers d'autres pages et d'autres sites, par exemple : http://ubuntu-fr.org/telechargement.
Attention à ne pas faire d'amalgame entre Web et Internet. Le salon IRC sur lequel s'est déroulée la séance de cours utilise Internet, pas le Web.
HTTP et Navigation
Pour accéder à un site web, il vous faut utiliser un client Web, appelé communément Navigateur, par exemple : firefox, lynx, opera, konqueror, w3m… Vous devez spécifier en plus du nom ou de l'adresse IP, le protocole utilisé.
Celui qui nous intéresse est HTTP1).
Un document Hypertexte est un document contenant des hyperliens.
Ceux-ci permettent de lier les pages les unes avec les autres. Ainsi, vous pouvez naviguer grâce à des liens sur les pages.
Cet ordinateur, auquel vous vous connectez pour lire cette documentation, héberge à cette adresse un logiciel qui fournit les pages demandées.
Apache est le plus utilisé.
Il existe une version sécurisée du HTTP : le HTTPS2).
Afin de différencier quel protocole on utilise, on leur réserve un port3), par défaut le 80 pour le mode non sécurisé et le 443 pour le mode sécurisé.
Il faut toutefois noter que les conventions ci-dessus peuvent ne pas être respectées si le client et le serveur sont cohérents entre eux et que le nouveau numéro choisi n'est pas déjà utilisé par ailleurs.
Mode de fonctionnement sommaire
Au moment de son démarrage, Apache charge le fichier de configuration de la machine locale et se met en attente de requêtes sur les interfaces réseaux.
Lorsque vous utilisez votre navigateur Web (un client HTTP), que vous cliquiez sur un lien ou que vous rentriez directement l'adresse dans la barre d'adresse, vous effectuez une requête :
- Le client détermine et se connecte au serveur (voir documentation DNS) ;
- Le client effectue une requête HTTP sur le serveur, par la méthode GET du protocole HTTP il lui demande une page ;
- Après l'analyse de la requête, le serveur renvoie la page concernée sous forme de code dont on peut spécifier le format de données ( pour ceux qui connaissent les balises <meta> de l'entête des documents servis, le fameux "content-type" des pages html ) ;
- Une fois toutes les données envoyées, le serveur ferme la connexion ;
- Parallèlement le client analyse et construit l'affichage à partir du code reçu.
Voilà, comment fonctionne le protocole HTTP et APACHE2 (sans entrer dans les détails
).
Pour installer un serveur HTTP, nous allons utiliser une application bien connue des administrateurs réseaux : Apache2.
Installation
Apache est composé de plusieurs paquets.
La bibliothèque, le serveur et ses outils
| Nom | Rôle |
|---|---|
| libapr1 | Apache's Portable Runtime Library, bibliothèque de fonctions standards portables. |
| apache2 | Ce paquet contient le serveur. |
| apache2.2-common | Ce paquet contient les modules standards apache2, qui incluent le support SSL. |
| apache2-utils | Outils pour serveurs web. |
libapr0 et apache2-common
sudo apt-get install libapr1 apache2 apache2.2-common apache2-utils
Le MPM
Le MPM4), indispensable, est le moteur du serveur, la manière dont il intercepte les requêtes. Il en existe plusieurs à vous de choisir en fonction de vos besoins mais le mod-php5 ne supporte que le prefork :
| Nom | Commentaire |
|---|---|
| apache2-mpm-prefork | Modèle traditionnel pour Apache2 version sans thread, intercepte les requêtes à la manière Apache 1.3, utile pour éviter la mise en thread pour la compatibilité avec les bibliothèques non-thread-safe. C'est le meilleur mpm pour isoler les requêtes. |
| apache2-mpm-worker | Modèle à processus haute vitesse pour Apache2 version avec thread, il est considérablement plus rapide que la version traditionnelle et c'est le MPM recommandé. |
sudo apt-get install apache2-mpm-prefork
sudo apt-get install apache2-mpm-worker
Les modules nécessaires aux différentes applications
Les mods permettent la prise en charge simplifiée des différentes technologies. Ils se nomment libapache2-mod-NOM. Voici la liste des principaux.
Base
SÉCURITÉ :
sudo apt-get install libapache2-mod-chroot #Apache2 module pour chrooter le serveur.
PAM :
sudo apt-get install libapache2-mod-auth-pam #Apache2 module pour l'authentification utilisant PAM
sudo apt-get install libapache2-mod-auth-sys-group #Apache2 module pour "require group" de PAM
Langages de script
PHP5 :
sudo apt-get install libapache2-mod-php5 #Apache 2 module pour la prise en charge de PHP5
PERL :
sudo apt-get install libapache2-mod-perl2 #Apache 2 module pour la prise en charge de PERL
PYTHON :
sudo apt-get install libapache2-mod-python #Apache 2 module pour la prise en charge de PYTHON
Base de données
MYSQL :
sudo apt-get install libapache2-mod-auth-mysql #Apache 2 module pour l'authentification MySQL
POSTGRESQL :
sudo apt-get install libapache2-mod-auth-pgsql #Apache 2 module pour l'authentification POSTGRESQL
Installation
Apache2, les bases et le mod chroot:
Installez les paquets apache2 apache2-utils apache2-mpm-prefork libapache2-mod-chroot libapache2-mod-auth-pam libapache2-mod-auth-sys-group
Installer ces paquets.
Si vous voulez utiliser PHP5:
Installez les paquets php5-common php5 php5-gd libapache2-mod-php5 + les bibliothèques dont vous vous servez dans vos pages.
Installer ces paquets.
Pour permettre l'interface entre php et MySQL, installer le module php5-mysql
Si vous voulez utiliser MYSQL:
Installez les paquets mysql-server libapache2-mod-auth-mysql
Installer ces paquets.
Si vous voulez utiliser POSTGRESQL:
Installez les paquets postgresql libapache2-mod-auth-pgsql
Installer ces paquets.
Configuration
Tous les fichiers de configuration de Apache2 sont dans le dossier /etc/apache2.
/etc/apache2
Rendez-vous dans le répertoire /etc/apache2/, et regardez les fichiers le composant :
apache2.conf conf.d envvars httpd.conf mods-available mods-enabled ports.conf sites-available sites-enabled
La plupart de ces fichiers sont plus ou moins spécifiques à Debian/Ubuntu et nous permettent de séparer la configuration en plusieurs parties.
httpd.confest le fichier utilisé par apache1, il est conservé vide dans Apache2 pour assurer la rétrocompatibilité. Il ne nous servira pas ;envvarsest utilisé pour définir des variables d'environnement propres à Apache ;ports.confcontient la directive listen qui spécifie les adresses et les ports d'écoutes ;apache2.confest le fichier principal de configuration c'est à partir de lui que tous les autres fichiers sont chargés ;conf.dest un répertoire qui contient plusieurs petits fichiers qui seront analysés par apache. Le seul fichier pour le moment estcharset, qui spécifie l'encodage à utiliser par défaut ;mods-availablecontient la liste des modules d'apache installés ;mods-enabledcelle des modules utilisés ;sites-availablecontient la liste des vhosts installés ;sites-enabledcelle des vhosts utilisés.
Configuration des interfaces
La spécification des interfaces sur lesquelles Apache2 écoutera les requêtes se fait dans ports.conf avec la directive Listen.
Vous devez spécifier au moins le port. Apache écoutera alors sur toutes les interfaces.
Pour restreindre l'utilisation à une ou plusieurs interfaces il suffit de les spécifier, suivies du port. Il faut une directive Listen par interface.
- Si le serveur est connecté avec une ip internet et que l'on souhaite écouter sur cette interface on ajoute la directive Listen Ip.Internet .
- Si le serveur est connecté avec une ip local et que l'on souhaite écouter sur cette interface on ajoute la directive Listen Ip.Local .
- Si l'on souhaite écouter sur un certain port on rajoute :Le_Port . Il est aussi possible de ne spécifier que le port Listen Le_Port.
Éditez le fichier /etc/apache2/ports.conf.(remplacer les X.X.X.X par l'ip de l 'interface d'écoute )
#interface (local ou internet) connectée sur port standard Listen X.X.X.X:80 # toutes les interfaces connectées sur port ssl Listen 443
Fichier de configuration
Éditez le fichier /etc/apache2/apache2.conf afin qu'il ressemble a ceci.
Les explications des différentes lignes sont données dans le fichier de configuration.
Les directives <IfModule !nom.c> testent la présence du module afin de s'adapter aux configurations.
Les autres lignes commençant par # sont des commentaires
# Répertoire Racine du serveur ServerRoot "/etc/apache2" # Fichier de vérrouillage (lock) du serveur # IL DOIT SE TROUVER SUR LE DISQUE LOCAL #<IfModule !mpm_winnt.c> #<IfModule !mpm_netware.c> LockFile /var/lock/apache2/accept.lock #</IfModule> #</IfModule> # Fichier du PID: endroit où, à son démarrage, apache doit stocker # son numéro d'identification de processus PidFile /var/run/apache2.pid # Delai d'attente dépassé : nombre de secondes avant de recevoir et d'envoyer # un message de "Délai d'attente dépassé" (timeout) Timeout 300 # Connexion persistante: Alloue ou non les requêtes persistantes # (plus d'une requête par connexion ). # Mettre à "Off" pour désactiver. KeepAlive On # Nombre Maximum de requêtes allouées durant une connexion persistante. # 0 = non limité # Il est recommandé de garder ce nombre assez haut pour des performances maximales MaxKeepAliveRequests 100 # Nombre de secondes d'attente pour la prochaine requête # d'un même client sur une même connexion avant un timeout KeepAliveTimeout 15 # Configuration du mpm chargé <IfModule mpm_prefork_module> # Nombre de processus serveurs fils à créer au démarrage. StartServers 5 # Nombre minimum de processus en attente d'intercepter des requêtes MinSpareServers 5 # Nombre maximum de processus en attente MaxSpareServers 15 # Nombre maximum processus fils créés # pour intercepter les requêtes simultanément MaxClients 150 # Limite le nombre de requête qu'un processus fils intercepte # durant son temps de vie. Si 0 alors le processus n'expirera jamais. MaxRequestsPerChild 0 </IfModule> <IfModule mpm_worker_module> StartServers 2 MaxClients 150 # Nombre minimum de processus en attente d'intercepter les piques de requêtes MinSpareThreads 25 # Nombre maximum de processus en attente MaxSpareThreads 75 ThreadsPerChild 25 MaxRequestsPerChild 0 </IfModule> # Utilisateur et Group sous lesquels les processus du serveur seront lancés User www-data Group www-data # Fichier de restriction des accès # non conseillé, préferer les directives internes au fichier de configuration # voir [[http://httpd.apache.org/docs/2.2/howto/htaccess.html]] AccessFileName .htaccess <Files ~ "^\.ht"> Order allow,deny Deny from all Satisfy All </Files> # Restriction de la racine du serveur <Directory /> Order Deny,Allow Deny from all Options None AllowOverride None </Directory> # Fichier contenant la liste des conversions des extensions de fichiers vers le type de contenu. # par défaut ce fichier est relié au contenu enregistré à l'IANA. http://www.iana.org/assignments/media-types/index.html. TypesConfig /etc/mime.types # définit le type par défaut des fichiers dont le type ne peut être déterminé # par le serveur. # Il convient de le mettre à "none" afin de ne pas fournir d'informations erronées. DefaultType none # Active la résolution DNS pour les noms d'hôtes HostnameLookups Off # chemin du fichier de log des erreurs du serveur. ErrorLog /var/log/apache2/error.log # niveau de log du serveur # emerg Messages Urgents - Le système est inutilisable. # alert Messages d'actions qui doivent être effectuées immédiatement. # crit Messages critiques. # error Messages d'erreurs. # warn Messages d'avertissement. # notice Messages normales mais significatives. # info Messages d'informations. # debug Messages de débogage LogLevel warn # format des lignes contenues dans les logs # %a Adresse ip distante. # %A Adresse ip local. # %B Taille de la réponse en octets, excluant l'entête HTTP. # %b Taille de la réponse en octets, excluant l'entête HTTP au format CLF. # %{Foobar}C Contenu du cookie "Foobar" de la requête envoyée au serveur. # %D Le temps mis à servir la requête . # %{FOOBAR}e Contenue de la variable d'environnement "FOOBAR". # %f Nom du fichier. # %h Hôte distant. # %H Le protocole demandé. # %{Foobar}i Le contenu de "Foobar": Ligne(s) d'en-tête de la requête envoyée au serveur. # %l nom du fichier de log distant (de identd, si il est fournit). # cela retournera un tiret tant que //mod_ident// n'est pas présent # et //IdentityCheck// n'est pas mis à ON. # %m Méthode de la requête. # %{Foobar}n Contenu de la note "Foobar" provenant d'un autre module. # %{Foobar}o Le contenu de "Foobar": Ligne(s) d'entête dans la réponse. # %p Port canonique du serveur qui sert la réponse. # %P Id du processus fils qui a servi la requête. # %{format}P Id du processus ou du thread fils qui a servi la requête. # Les formats valides sont pid, tid, et hextid. # hextid nécessite APR 1.2.0 ou supérieur. # %q Chaînes de la requête (Commençant avec un ? si une chaine de requête existe, sinon une chaîne vide) # %r Première ligne de la requête. # %s Statut. Pour les requête redirigées en interne, ceci est la requête originale --- %>s pour la dernière. # %t Heure à laquelle la requête a été reçue (format standard anglais mois jour année ) # %{format}t L'heure, au format précisé, qui doit être dans les formats de strftime(3). (potentiellement localisé). # %T Le temps mis pour répondre à la requête. # %u Utilisateur distant (de l'authentification; peut être faux si le code de retour de statut (%s) est 401) # %U Url demandée, n'inclue aucune chaîne de requête. # %v Nom canonique de ServerName du serveur qui répond à la requête. # %V Nom du serveur en fonction du paramètre UseCanonicalName. # %X Statut de la connexion une fois la réponse envoyée. # X = connexion annulée avant la réponse complète. # + = la connexion peut être maintenue après l'envoi de la réponse. # - = la connexion sera fermée après l'envoi de la réponse. # %I Octets reçus, incluant l'entête et la requête, ne peut être nul. Vous devez activer //mod_logio// pour l'utiliser. # %O Octets envoyés, incluant l'entête, ne peut être nul. Vous devez activer //mod_logio// pour l'utiliser. LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined LogFormat "%h %l %u %t \"%r\" %>s %b" common LogFormat "%{Referer}i -> %U" referer LogFormat "%{User-agent}i" agent # entête envoyée au client à propos du serveur # Prod Server: Apache # Major Server: Apache/2 # Minor Server: Apache/2.0 # Min Server: Apache/2.0.41 # OS Server: Apache/2.0.41 (Unix) # Full (ou non spécifié) Server: Apache/2.0.41 (Unix) PHP/4.2.2 MyMod/1.2 ServerTokens Prod # Pied de page renvoyé par le serveur # utile afin de déterminer quelle est le serveur # qui dans une chaîne (proxy) qui génère une erreur ServerSignature Off # Inclusion des fichiers, contenus dans le dossier des mods, qui sont activés Include /etc/apache2/mods-enabled/*.load Include /etc/apache2/mods-enabled/*.conf # Inclusion de l'ancien fichier de configuration de apache # à des fins de compatibilités ascendantes. Include /etc/apache2/httpd.conf # Inclusion du fichier de configuration des adresses et ports # sur lesquels le serveur sera à l'écoute Include /etc/apache2/ports.conf # Inclusion d'autres fichiers de configuration Include /etc/apache2/conf.d/ # inclusion des configurations des sites actifs Include /etc/apache2/sites-enabled/ # Directive des alias <IfModule alias_module> # alias des icones d'apache # nom de l'alias , répertoire vers lequel pointe l'alias Alias /icons "/usr/share/apache2/icons/" <Directory "/usr/share/apache2/icons"> Options None AllowOverride None Order allow,deny Allow from all </Directory> # alias pour awstats Alias /awstats-icon "/usr/share/awstats/icon" ScriptAlias /awstats "/usr/lib/cgi-bin/" <Directory "/usr/share/awstats/icon"> Options None #Indexes MultiViews AllowOverride None Order allow,deny Allow from all </Directory> </IfModule> # Types images d'icône <IfModule mod_autoindex.c> IndexOptions FancyIndexing VersionSort HTMLTable NameWidth=* AddIconByEncoding (CMP,/icons/compressed.gif) x-compress x-gzip AddIconByType (TXT,/icons/text.gif) text/* AddIconByType (IMG,/icons/image2.gif) image/* AddIconByType (SND,/icons/sound2.gif) audio/* AddIconByType (VID,/icons/movie.gif) video/* AddIcon /icons/binary.gif .bin .exe AddIcon /icons/binhex.gif .hqx AddIcon /icons/tar.gif .tar AddIcon /icons/world2.gif .wrl .wrl.gz .vrml .vrm .iv AddIcon /icons/compressed.gif .Z .z .tgz .gz .zip AddIcon /icons/a.gif .ps .ai .eps AddIcon /icons/layout.gif .html .shtml .htm .pdf AddIcon /icons/text.gif .txt AddIcon /icons/c.gif .c AddIcon /icons/p.gif .pl .py AddIcon /icons/f.gif .for AddIcon /icons/dvi.gif .dvi AddIcon /icons/uuencoded.gif .uu AddIcon /icons/script.gif .conf .sh .shar .csh .ksh .tcl AddIcon /icons/tex.gif .tex AddIcon /icons/bomb.gif core AddIcon /icons/back.gif .. AddIcon /icons/hand.right.gif README AddIcon /icons/folder.gif ^^DIRECTORY^^ AddIcon /icons/blank.gif ^^BLANKICON^^ DefaultIcon /icons/unknown.gif ReadmeName README.html HeaderName HEADER.html IndexIgnore .??* *~ *# RCS CVS *,v *,t </IfModule> # Type langages <IfModule mod_mime.c> AddType application/x-compress .Z AddType application/x-gzip .gz .tgz AddLanguage ca .ca AddLanguage cs .cz .cs AddLanguage da .dk AddLanguage de .de AddLanguage el .el AddLanguage en .en AddLanguage eo .eo AddLanguage es .es AddLanguage et .et AddLanguage fr .fr AddLanguage he .he AddLanguage hr .hr AddLanguage it .it AddLanguage ja .ja AddLanguage ko .ko AddLanguage ltz .ltz AddLanguage nl .nl AddLanguage nn .nn AddLanguage no .no AddLanguage pl .po AddLanguage pt .pt AddLanguage pt-BR .pt-br AddLanguage ru .ru AddLanguage sv .sv AddLanguage zh-CN .zh-cn AddLanguage zh-TW .zh-tw </IfModule> # Langue prioritaire pour les pages de réponses (choisir l'ordre des langues des pages) <IfModule mod_negotiation.c> LanguagePriority fr ca cs da de el eo es et en he hr it ja ko ltz nl nn no pl pt pt-BR ru sv zh-CN zh-TW ForceLanguagePriority Prefer Fallback </IfModule> # Type d'encodage de caractères <IfModule mod_mime.c> AddCharset us-ascii .ascii .us-ascii AddCharset ISO-8859-1 .iso8859-1 .latin1 AddCharset ISO-8859-2 .iso8859-2 .latin2 .cen AddCharset ISO-8859-3 .iso8859-3 .latin3 AddCharset ISO-8859-4 .iso8859-4 .latin4 AddCharset ISO-8859-5 .iso8859-5 .cyr .iso-ru AddCharset ISO-8859-6 .iso8859-6 .arb .arabic AddCharset ISO-8859-7 .iso8859-7 .grk .greek AddCharset ISO-8859-8 .iso8859-8 .heb .hebrew AddCharset ISO-8859-9 .iso8859-9 .latin5 .trk AddCharset ISO-8859-10 .iso8859-10 .latin6 AddCharset ISO-8859-13 .iso8859-13 AddCharset ISO-8859-14 .iso8859-14 .latin8 AddCharset ISO-8859-15 .iso8859-15 .latin9 AddCharset ISO-8859-16 .iso8859-16 .latin10 AddCharset ISO-2022-JP .iso2022-jp .jis AddCharset ISO-2022-KR .iso2022-kr .kis AddCharset ISO-2022-CN .iso2022-cn .cis AddCharset Big5 .Big5 .big5 .b5 AddCharset cn-Big5 .cn-big5 # For russian, more than one charset is used (depends on client, mostly): AddCharset WINDOWS-1251 .cp-1251 .win-1251 AddCharset CP866 .cp866 AddCharset KOI8 .koi8 AddCharset KOI8-E .koi8-e AddCharset KOI8-r .koi8-r .koi8-ru AddCharset KOI8-U .koi8-u AddCharset KOI8-ru .koi8-uk .ua AddCharset ISO-10646-UCS-2 .ucs2 AddCharset ISO-10646-UCS-4 .ucs4 AddCharset UTF-7 .utf7 AddCharset UTF-8 .utf8 AddCharset UTF-16 .utf16 AddCharset UTF-16BE .utf16be AddCharset UTF-16LE .utf16le AddCharset UTF-32 .utf32 AddCharset UTF-32BE .utf32be AddCharset UTF-32LE .utf32le AddCharset euc-cn .euc-cn AddCharset euc-gb .euc-gb AddCharset euc-jp .euc-jp AddCharset euc-kr .euc-kr #Not sure how euc-tw got in - IANA doesn't list it??? AddCharset EUC-TW .euc-tw AddCharset gb2312 .gb2312 .gb AddCharset iso-10646-ucs-2 .ucs-2 .iso-10646-ucs-2 AddCharset iso-10646-ucs-4 .ucs-4 .iso-10646-ucs-4 AddCharset shift_jis .shift_jis .sjis AddHandler type-map var AddType text/html .shtml AddOutputFilter INCLUDES .shtml </IfModule> <IfModule mod_setenvif.c> BrowserMatch "Mozilla/2" nokeepalive BrowserMatch "MSIE 4\.0b2;" nokeepalive downgrade-1.0 force-response-1.0 BrowserMatch "RealPlayer 4\.0" force-response-1.0 BrowserMatch "Java/1\.0" force-response-1.0 BrowserMatch "JDK/1\.0" force-response-1.0 BrowserMatch "Microsoft Data Access Internet Publishing Provider" redirect-carefully BrowserMatch "MS FrontPage" redirect-carefully BrowserMatch "^WebDrive" redirect-carefully BrowserMatch "^WebDAVFS/1.[012]" redirect-carefully BrowserMatch "^gnome-vfs/1.0" redirect-carefully BrowserMatch "^XML Spy" redirect-carefully BrowserMatch "^Dreamweaver-WebDAV-SCM1" redirect-carefully </IfModule> # module d'information sur le statut du serveur <IfModule mod_status.c> <Location /server-status> SetHandler server-status Order deny,allow Deny from all Allow from 127.0.0.1 </Location> </IfModule> # module des informations du serveur <IfModule mod_info.c> <Location /server-info> SetHandler server-info Order deny,allow Deny from all Allow from 127.0.0.1 </Location> </IfModule>
sites-available
Ce fichier contient les différents vhosts5) que vous utiliserez. Ils vous permettent de définir plusieurs sites sur une même machine,
le plus souvent des sous-domaines (www.domain.tld, machin.domain.tld…), mais aussi d'autres domaines (domain.tld, autredomain.tld…).
# NameVirtualHost définit les IPs à utiliser par apache, # * signifie qu'on utilise n'importe quel IP pour acceder au serveur # 127.0.0.1 (boucle locale), 192.168.x.x (ip reseau local), ou une IP externe. # Cette directive est en dehors du Vhost, on pourrait donc la déplacer dans apache2.conf. # Dans tous les cas si elle est définie à * , elle ne doit pas être reprise dans les autres vhosts. NameVirtualHost *:80 # Le vhost proprement dit : il est compris dans un bloc <VirtualHost>, # Ces blocs définissent la "portée" de la validité des directives qui y sont définies. # Le * derrière VirtualHost définit ici que le vhost est valable pour toutes les IPs sur lesquelles apache écoute. <VirtualHost *:80> # ServerName définie le nom utilisé pour le vhost. Mettez le nom de l'hote du domaine ServerName www.domain.tld # ServerAlias définie les autres sous domaines pour lesquels le serveur répondra. ServerAlias domain.tld *.domain.tld # ServerAdmin vous permet de spécifier un email à utiliser en cas de problème, sur une page d'erreur 404 par exemple. ServerAdmin administrateur.web@domain.tld # DocumentRoot définit le dossier racine dans lequel seront stockés les fichiers du site. DocumentRoot /var/www/htdocs # Directory définit les options par défaut du répertoire <Directory /var/www/htdocs> # Active les options: # FollowSymLinks permet de suivre les liens symboliques. # Indexes autorise le listage de fichiers d'un répertoire qui ne contient pas d'index. Options Indexes FollowSymLinks MultiViews # AllowOverride permet de surcharger certaines options en utilisant des fichiers .htaccess dans le répertoire du site. AllowOverride None # Droits par defaut Order allow,deny allow from all # permet de rediriger les requêtes vers un fichier d'index precis RedirectMatch ^/$ /index.php </Directory> ErrorLog /var/log/apache2/error.domain.tld.log CustomLog /var/log/apache2/access.domain.tld.log combined </VirtualHost>
Enregistrez les changements.
Supprimer l'ancien lien symbolique de la configuration d'origine
sudo a2dissite default
Il faut maintenant activer le vhost. Pour cela il faut créer un lien symbolique du fichier de sites-available/ vers sites-enabled/.
En utilisant:
sudo a2ensite nomduvhost
Éditez le fichier /etc/hosts et modifier la ligne avec nomduvhost le ServerName que vous avez choisi:
127.0.0.1 localhost nomduvhost
Cela permettra à votre système de faire la correspondance entre le nom de l'hôte et votre machine locale.
Notez que sous debian/ubuntu 2 les pages a utiliser comme index sont spécifiées dans le module dir (mods-available/dir.conf).
Activer les scripts CGI
Pour se faire, rien de plus simple, ajouter les lignes suivantes à votre "apache2.conf"
ScriptAlias /cgi-bin/ /var/www/votre_site/cgi-bin/ <Directory /var/www/votre_site/cgi-bin/> Options ExecCGI AddHandler cgi-script cgi pl py </Directory>
Sécurité des pages
Afin de modifier les pages nous allons créer un utilisateur webadmin le seul à pouvoir en créer, en supprimer et en modifier.
En faisant de webadmin le propriétaire et de www-data le groupe, tous les autres utilisateurs du système ne pourront accèder aux fichiers grâce aux droits appliqués ensuite.
Nous interdirons à apache2 de modifier les pages en autorisant seulement la lecture au groupe www-data (l'utilisateur sous lequel tourne apache et qui est aussi son groupe), et en donnant tous les droits au propriétaire.
Création de l'utilisateur webadmin:
sudo adduser webadmin
Modification des propriétaires de tous les fichiers et dossiers du répertoire :
sudo chown -Rf webadmin:www-data /var/www/htdocs
RÉPERTOIRES lecture et exécution pour le group www-data et écriture pour le propriétaire 750 :
sudo find /var/www/htdocs -type d -exec chmod 750 {} \;
FICHIERS lecture pour www-data et creation pour le propriétaire 640 :
sudo find /var/www/htdocs -type f -exec chmod 640 {} \;
Redémarrer Apache2
sudo /etc/init.d/apache2 restart
Il est aussi possible de redémarrer apache2 sans "tuer" les requêtes en cours :
apache2ctl graceful
Cette solution est plus élégante sur un serveur en production.
Nous pouvons maintenant passer à la phase de vérification.
Si il y a des messages d'erreurs regarder les fichiers suivant:
tail /var/log/syslog tail /var/log/apache2/access.log tail /var/log/apache2/error.log
Activer les fichiers .htaccess
Les .htaccess permettent de creer des zones administrateur protégées très facilement ou aussi d'activer des configurations de façon localisées.
éditez le fichier /etc/apache2/sites-enabled/000-default
Selon la doc Apache : En géneral, vous ne devriez jamais utiliser les fichiers .htaccess à moins que vous n'ayez pas accès au fichier principal de configuration du serveur. Il y a, par exemple, une conception erronée qui prévaut selon laquelle les droits des utilisateurs doivent toujours être gérés dans le fichier .htaccess. Cela n'est simplement pas le cas. Vous pouvez placer les configuration des droits dans la configuration principale du serveur, et cela est, en fait, la manière favorisé de le faire.
"In general, you should never use .htaccess files unless you don't have access to the main server configuration file. There is, for example, a prevailing misconception that user authentication should always be done in .htaccess files. This is simply not the case. You can put user authentication configurations in the main server configuration, and this is, in fact, the preferred way to do things.
.htaccess files should be used in a case where the content providers need to make configuration changes to the server on a per-directory basis, but do not have root access on the server system." cf: http://httpd.apache.org/docs/2.2/howto/htaccess.html#when
Ajoutez ces lignes à la fin du fichier :
<Directory /var/www/le_rep_ou_vous_voulez_activer_le_.htaccess>
AllowOverride all
</Directory>
Redémarrer ensuite apache et les .htaccess sont activés
Si vous souhaitez autoriser les fichiers .htaccess partout (et pas uniquement dans un unique répertoire) il vous faudra remplacer "AllowOverride none" par "AllowOverride All" entre les balises <Directory />…</Directory> et <Directory /var/www/>…</Directory> du fichier /etc/apache2/sites-enabled/000-default.
Modules
Il est possible d'ajouter des modules à apache, ajoutant des fonctionnalités à votre serveur web. Tous les modules sont répertoriés ici : http://modules.apache.org/
Activer L'url rewriting
Charger le module rewrite :
sudo a2enmod rewrite
Ensuite, deux possibilités s'offrent à vous suivant vos capacités de gestion de votre serveur :
- pour un serveur mutualisé par exemple : placer un fichier .htaccess avec des règles de rewriting à la racine de votre site. Pour cela les fichiers .htaccess doivent être autorisé : Activer les fichiers .htaccess
- pour un serveur dédié ou un serveur personnel (sur votre propre distribution) il est conseillé d'ajouter les règles de rewriting directement dans le fichier de configuration d'Apache2 : /etc/apache2/apache2.conf en recopiant les lignes suivantes à la fin dudit fichier.
Un petit exemple :
Options +FollowSymlinks RewriteEngine on # Lorsque l'on tape dans la barre d'adresse www.votre_domaine.net/page-1 c'est la page www.votre_domaine.net/page.php?id=1 qui s'affiche # [L]=[last] signifie que si cette régle s'applique on n'en cherche pas d'autre RewriteRule ^page-1$ /page.php?id=1 [L]
Encore mieux avec les expressions régulières :
Options +FollowSymlinks RewriteEngine on # Lorsque l'on tape dans la barre d'adresse www.votre_domaine.net/page-* c'est la page www.votre_domaine.net/page.php?id=* qui s'affiche # ^ et $ signifie respectivement le début et la fin d'une expression régulière RewriteRule ^page-([0-9]+)$ /page.php?id=$1 [L]
Mod_bw - Limiter la bande passante
Il existe un module compatible avec apache2 permettant de limiter la bande passante.
Installation du module : apt://libapache2-mod-bw
Configuration du module :
Pour cela il faut ajouter quelques lignes dans les Vhost de vos domaines :
cd /etc/apache2/sites-enabled/
sudo gedit votredomaine.tls.conf
Juste avant </VirtualHost>, ajouter :
- Limiter tous les utilisateurs à 1OKb/s :
BandwidthModule On ForceBandWidthModule On Bandwidth all 10240
- Limiter tous les utilisateurs à 50Kb/s pour les fichiers supérieurs à 8000Kb :
BandwidthModule On ForceBandWidthModule On LargeFileLimit * 8000 50000
- Limiter les fichiers .avi et .mpg à 20Kb/s :
BandwidthModule On ForceBandWidthModule On LargeFileLimit .avi 1 20000 LargeFileLimit .mpg 1 20000
Redémarrer Apache2
sudo /etc/init.d/apache2 restart
Mod_deflate - Compression gzip
Le mod_deflate sur apache2 permet de gagner en rapidité et en bande passante grâce à la compression des données qui transitent entre le serveur et les clients. La compression utilisée est gzip. L'installation ci-dessous permet de compresser les fichiers texte (css,…).
Activation des modules deflate et headers:
sudo a2enmod headers sudo a2enmod deflate
Configuration de deflate:
Créez ou modifiez le fichier /etc/apache2/conf.d/mod_deflate.conf et ajoutez-y:
<Location />
# Insert filter
SetOutputFilter DEFLATE
# Netscape 4.x has some problems...
BrowserMatch ^Mozilla/4 gzip-only-text/html
# Netscape 4.06-4.08 have some more problems
BrowserMatch ^Mozilla/4\.0[678] no-gzip
# MSIE masquerades as Netscape, but it is fine
# BrowserMatch \bMSIE !no-gzip !gzip-only-text/html
# NOTE: Due to a bug in mod_setenvif up to Apache 2.0.48
# the above regex won't work. You can use the following
# workaround to get the desired effect:
BrowserMatch \bMSI[E] !no-gzip !gzip-only-text/html
# Don't compress images
SetEnvIfNoCase Request_URI \
\.(?:gif|jpe?g|png)$ no-gzip dont-vary
# Make sure proxies don't deliver the wrong content
Header append Vary User-Agent env=!dont-vary
</Location>
Redémarrage de apache2:
sudo /etc/init.d/apache2 restart
Les pages seront compressées quand le client le supporte.
Tapez ceci :
echo "ServerName localhost" | sudo tee /etc/apache2/conf.d/fqdn
mod_userdir gerer les dossiers utilisateur
Cette partie est déjà documentee pour xampp ici http://doc.ubuntu-fr.org/xampp#modifier_le_dossier_racine_du_serveur_apache mais je prefere le mettre dans apache.
Certaines personnes aimeraient faire en sorte à ce que chaque utilisateur du serveur puisse avoir son site web perso.
Ce site peut être accessible par : http://mondomaine.com/~nom_du_user
Pour cela, le module userdir est fait pour vous.
Activer le module userdir
sudo a2enmod userdir
Creer un fichier qui contient sa configuration :
sudo gedit /etc/apache2/sites-available/userdir.conf
Mettre ce contenu tel quel dedans :
# Settings for user home directories
#
# Required module: mod_userdir
#
# UserDir: The name of the directory that is appended onto a user's home
# directory if a ~user request is received. Note that you must also set
# the default access control for these directories, as in the example below.
#
UserDir public_html
#
# Control access to UserDir directories. The following is an example
# for a site where these directories are restricted to read-only.
#
<Directory /home/*/public_html>
AllowOverride FileInfo AuthConfig Limit Indexes
Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec
<Limit GET POST OPTIONS>
Order allow,deny
Allow from all
</Limit>
<LimitExcept GET POST OPTIONS>
Order deny,allow
Deny from all
</LimitExcept>
</Directory>
Activer ce fichier :
sudo a2ensite userdir.conf
Redémarrer apache
Creer un dossier nommé public_html dans votre home et essayer, ca devrait marcher :)
mod_proxy ou comment rediriger certains domaines vers certaines machines
Mon probleme etait le suivant :
routeur :
- renvoi du port 80 sur la machine 192.168.0.10
machine 192.168.0.10 :
- virtualhosts renvoyant vers plusieurs dossiers
- toto.mondomaine.com va vers /home/toto/www
- titi.mondomaine.com va vers /home/titi/www
- etc…
- et 000-default va vers /var/www
machine 192.168.0.11 :
- virtualhosts renvoyant vers plusieurs dossiers
- tata.mondomaine.com va vers /home/tata/www
- tutu.mondomaine.com va vers /home/tutu/www
- etc…
- et 000-default va vers /var/www
Sauf que si on met http://tata.mondomaine.com dans son navigateur on se retrouve avec le site par defaut de 192.168.0.10….
Donc, il faut appeller mod_proxy a la rescousse.
sur 192.168.0.10 : activer le module proxy avec :
a2enmod proxy
créer un virtualhost /etc/apache2/sites-available/tata.mondomaine.com qui contient :
<VirtualHost 192.168.0.10:80>
ProxyRequests Off
ProxyPreservehost on
ServerName tata.mondomaine.com
ProxyPass / http://192.168.0.11/
ProxyPassReverse / http://192.168.0.11/
<Proxy>
Order Allow,Deny
Allow from all
</Proxy>
</VirtualHost>
Activer ce fichier :
sudo a2ensite tata.mondomaine.com
Redémarrer apache
Et c'est tout :)
Si ca veut pas, activer aussi les modules proxy_http et proxy_connect
bien sûr on peut rajouter dans /etc/hosts:
192.168.0.11 tata.mondomaine.com
comme ca, dans ProxyPass et ProxyPassReverse on peut utiliser les noms de domaine a la place des adresses
et comme c'est un proxy, beaucoup d'autres options sont envisageables mais je n'irai pas plus loin pour aujourd'hui.
Optimiser votre serveur apache2
Il est possible d'optimiser votre serveur apache.
Accélérateurs PHP
Permet de mettre en cache le code PHP déjà compilé. Ceci évitera de recompiler les fichiers PHP à chaque fois, ce qui augmente de façon considérable les performances de votre serveur et donc de vos sites.
Voici un comparatif de ce qui existe actuellement :
XCache
Plus moderne et a été réécrit de zéro récemment. Il assure un meilleur support des versions récentes de PHP, au contraire des anciens eaccelerator and co.
eAccelerator
Désinstallation
Pour supprimer cette application, il suffit de :
- supprimer les paquets. Vous devez supprimer tous les paquets que vous avez installés. La configuration de l'application sera conservée ou supprimée selon la méthode de désinstallation que vous choisirez.
Liens utiles
Le contenu de ce wiki est sous licence : CC BY-SA v3.0

