Installation et configuration d'Apache 2
Contents
- 1 Introduction
- 2 Installation
- 3 Configuration
- 4 Ressources
1 Introduction
Apache est l'un des serveurs web les plus utilisés au monde pour ne pas dire LE plus utilisé au monde.
2 Installation
Pour l'installer :
apt-get install apache2
3 Configuration
3.1 Choisir un Charset par défaut
Dans la configuration /etc/apache2/apache2.conf ou /etc/apache2/conf.d/charset, insérez ceci :
AddDefaultCharset .latin9
Puis reloadez apache :
/etc/init.d/apache2 reload
3.2 Authentifications
3.2.1 LDAP
Pour avoir une authentification de type LDAP, il va falloir installer ceci :
apt-get |
apt-get install libapache-authznetldap-perl |
Puis activer le module et enfin redémarrer le serveur :
a2enmod |
a2enmod authnz_ldap /etc/init.d/apache2 restart |
Maintenant, pour la partie config, je vais prendre l'exemple de Nagios3 dans lequel il va falloir toucher à la partie "DirectoryMatch" comme ceci :
Ici, j'ai 2 groupes (sysnet et prod) qui sont autoriser à se connecter.
3.3 Ne pas authentifier les machines venant d'une certaine IP
J'ai besoin pour des écrans de monitoring de ne pas avoir besoin d'authentification pour Nagios et en même temps garder l'authentififaction LDAP pour les autres personnes. En reprenant l'exemple ci dessus, voici les lignes à modifier :
/etc/apache2/conf.d/nagios3 |
AllowOverride AuthConfig Require valid-user Order Deny,Allow Allow From 10.100.10.0/24 Satisfy Any |
De la sorte, les IP venant du subnet 10.100.10.0/24 n'ont pas besoin de s'authentifier tandis que les autres si. Pour ensuite décider de valider une solution ou l'autre, j'utilise la directive Satisfy Any. On peut mettre 'Satisfy All' si l'on souhaite que toutes les conditions soient validées.
3.4 Faire des redirections
Si par exemple vous voulez protéger un dossier bien particulier, vous avez 2 méthodes :
- L'interdiction complète
- La redirection
PS : Je ne parlerais pas ici des cas particuliers tel que les htaccess, voir cette documentation.
Pour interdire un accès,
<Directory /mon/dossier/a/interdire> Order allow,deny Deny from all </Directory>
Ensuite si vous souhaitez faire une redirection, insérez ceci dans votre "Directory" :
RedirectMatch ^/$ http://mysecureshell.sourceforge.net
Ceci redirigera sur le site de MySecureShell :-). Sinon si vous souhaitez rediriger dans un dossier local :
RedirectMatch ^/$ /mon_dossier/
Il existe également le fin du fin (ceux qui ont dit plantafin prennent la porte !) :
Redirect /mondossier http://mysecureshell.sourceforge.net
ou encore :
RedirectMatch ^(.*)$ https://www.deimos.fr$1
Ce qui me donne :
<VirtualHost *:80> ServerName www.deimos.fr ServerAlias deimos.fr www.deimos.fr RedirectMatch ^(.*)$ https://www.deimos.fr$1 </VirtualHost>
3.4.1 Redirecteur HTML
Voici une solution très simple pour faire un redirecteur. Il sagit de placer un fichier index.html dans le dossier voulu avec ce contenu :
<?xml version="1.0" encoding="ISO-8859-1"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="content-type" content="text/html; charset=ISO-8859-1" /> <meta http-equiv="refresh" content="0; url=http://www.google.com" /> <title>www.deimos.fr</title> <meta name="robots" content="noindex,follow" /> </head> <body> <p><a href="http://www.google.com">Please wait while redirecting...</a></p> </body> </html>
3.4.2 VirtualHost
Dans le cas où nous avons un apache en frontale et que nous souhaitons rediriger des flux sur d'autres apache en dorsale, il faut activer le mod_proxy. Voici un exemple :
ProxyRequests Off NameVirtualHost 1.2.3.4 # IP de ta box <VirtualHost 1.2.3.4> # Website géré par l'Apache ServerName www.domain.tld DocumentRoot /var/www/htdocs/ # etc... </VirtualHost> <VirtualHost 1.2.3.4> ServerName www.domain2.tld ErrorLog blabla CustomLog blabla ProxyPassReverse / http://127.0.0.1:8002/ </VirtualHost> <VirtualHost 1.2.3.4> ServerName www.domain3.tld ErrorLog blabla CustomLog blabla ProxyPassReverse / http://127.0.0.1:8003/ </VirtualHost>
Ici, en fonction de l'url que le client aura tapée, il y aura des redirections automatiques sur d'autres serveurs.
3.5 Redirection avec réécriture de l'URL
Voici un exemple de réécriture d'URL. Ici, cela permet de rediriger cvsweb.mydomain.com automatiquement vers la bonne URL et réécrire en plus l'url au propre. C'est à dire que je suis passé de :
à
Voici donc la solution, dans un premier temps, nous allons charger le module :
a2enmod rewrite
Ensuite on va écrire ceci dans notre fichier de configuration (/etc/apache2/sites-enabled/000-default) :
<VirtualHost cvsweb.mydomain.com:80> ServerName http://cvsweb.mydomain.com ServerAlias cvsweb ServerAdmin it-system@mydomain.com DocumentRoot /var/www/ ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/ LogLevel warn ServerSignature On RedirectMatch ^/$ /cgi-bin/cvsweb/ ### Rewrite http://cvsweb as http://cvsweb.mydomain.com RewriteEngine On RewriteCond %{HTTP_HOST} ^cvsweb$ RewriteRule ^(.*)$ http://cvsweb.mydomain.com/$1 [R=301,L] </VirtualHost>
Puis on force apache à recharger tout ça :
/etc/init.d/apache2 force-reload
3.5.1 Interdire l'accès à son site via Internet Explorer
Il est possible d'interdire l'accès à tout un tas de navigateur. Si comme moi, vous n'êtes pas copain copain avec IE qui vous flingue vos PNG en version 6, qui ne respecte pas les normes, qui flingue les CSS, etc... il peut être pratique de le bloquer et d'indiquer gentillement à l'internaute en question d'aller télécharger au plus vite Firefox.
Pour cela, nous allons utiliser le mode rewrite. Il faut donc l'activer comme décrit plus haut. Puis on ajoute dans le dossier voulu (Directory donc tout le site par exemple) ces lignes dans sites-enabled/000-default :
<Directory /> ... AllowOverride FileInfo <IfModule mod_rewrite.c> RewriteEngine on RewriteCond %{HTTP_USER_AGENT} .*MSIE.* # opera se fait passer pour IE des fois RewriteCond %{HTTP_USER_AGENT} !.*Opera.* # on evite une boucle infinie dans les conditions RewriteCond %{REQUEST_FILENAME} !.*ie.html # on redirige vers une page expliquant les raisons du rejet RewriteRule .* /ie.html [L] </IfModule> </Directory>
Il ne reste plus qu'a créer le fichier ie.html et mettre son jolie texte dedans (vous pouvez également faire un simple fichier texte). Voici ce que j'utilise (/var/www/ie.html) :
3.6 Dossiers Publics
Les dossiers publics servent à avoir plusieurs clients sur un serveur dont chacun a son propre espace personnel. La pratique est assez simple, nous avons par exemple l'utilisateur toto qui un un dossier "public_html" dans son home, et son serveur web est accessible via "http://serveur/~toto". J'ai effectué ceci sous OpenBSD avec apache 1.3, normalement pour la version 2, c'est la même syntaxe. Voici donc la configuration a rajouter :
UserDir public_html <Directory /home/clients/*/public_html> AllowOverride FileInfo AuthConfig Limit Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec # Look HeaderName /header.htm <Limit GET POST OPTIONS PROPFIND> Order allow,deny Allow from all </Limit> <Limit PUT DELETE PATCH PROPPATCH MKCOL COPY MOVE LOCK UNLOCK> Order deny,allow Deny from all </Limit> </Directory>
Vous pouvez également voir que j'ai changer le header (en tête) de mes pages principales avec l'option "HeaderName". Ce fichier header.htm doit être situé dans le dossier "DocumentRoot" quand il est appellé par "/".
Voici un exemple avec un mix d'authentification BSD + restriction par IP :
UserDir download AuthBSDGroup auth <Directory "/home/clients/*/download"> AllowOverride FileInfo AuthConfig Limit Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec ### IP security for client connections ### Order deny,allow Deny from all Allow from 192.168.0.0/24 ################# # Look HeaderName /header.htm # Mod Auth BSD SSLRequireSSL AuthType Basic AuthName "Client Authentication" AuthBSD On AuthBSDKeepPass Off AuthBSDStrictRequire On <Limit GET POST OPTIONS PROPFIND PUT DELETE PATCH PROPPATCH MKCOL COPY MOVE LOCK UNLOCK> Require valid-user </Limit> </Directory>
3.7.1 Standard
Si vous souhaitez changer le haut et le bas de vos pages de navigation (celles qui permettent de parcourir des fichiers et dossiers), il est possible d'utiliser ceci :
HeaderName /.header.htm ReadmeName /.footer.htm
Il suffit de créer les fichiers .header.htm et .footer.htm et de mettre ce que vous voulez dedans :-)
3.7.2 Evolué
Il peut arriver que vous vouliez rendre la chose un petit peu plus interractive que du simple html. Mais vous allez vous heurter à un problème de taille puisqu'il n'arrivera tout simplement pas à interpréter votre code. Pour mon cas, j'ai voulu le faire en php et je vous livre donc la solution. Il faut que dans votre Directory, là ou vous avez déjà vos lignes contenant le HeaderName et le ReadmeName, vous insériez ces lignes :
# In order for the PHP file to execute in a header, need to have a major type of text AddType text/html .php AddHandler application/x-httpd-php .php Options -Indexes HeaderName /.header.htm ReadmeName /.footer.php
Et là par exemple, j'ai bien mon footer en php :-). Je vous laisse suivre les explications sur le site d'Apache. Vous pouvez également faire du cgi etc...
3.8 Activer la compression PHP
La compression PHP5 va nous faire gagner de précieuses secondes sur l'affichage d'une page. Pour l'activer, éditez le fichier suivant et passez le paramètre en "on" :
Redémarrez ensuite votre serveur web pour que la configuration soit appliquée.
4 Ressources
Documentation Apache sur OpenBSD
Documentation on reducing Apache's load with lighttpd
http://wiki.gcu.info/doku.php?id=unix:apache_mod_rewrite&s=internet%20explorer
The Useful Uses Of Mod Rewrite
How To Specify A Custom php ini For A Web Site (Apache2 With mod php)