Apache : Différence entre versions

De Teteve wiki
Aller à : navigation, rechercher
 
Ligne 1 : Ligne 1 :
 
== Pré requis (installation) ==
 
== Pré requis (installation) ==
  
Rien de bien compliqué :
+
Rien de bien compliqué pour l'installation :
 +
 
 
  # apt-get install apache2
 
  # apt-get install apache2
  
Ligne 22 : Ligne 23 :
 
  ServerRoot "/etc/apache2"
 
  ServerRoot "/etc/apache2"
 
  DirectoryIndex index.php index.html # Indique quel type de fichier index doit sélectionner apache par défaut
 
  DirectoryIndex index.php index.html # Indique quel type de fichier index doit sélectionner apache par défaut
# Informations que renvoie Apache en cas d'erreur ou dans les headers
 
ServerTokens Prod
 
ServerSignature Off
 
 
   
 
   
 
  # Config perso des pages d'erreur
 
  # Config perso des pages d'erreur
Ligne 63 : Ligne 61 :
 
  '''# EN COURS D'APPROFONDISSEMENT...'''
 
  '''# EN COURS D'APPROFONDISSEMENT...'''
 
   
 
   
  LogFormat "%v:%p %h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" vhost_combined
+
  VOIR LA PARTIE "LOGS" (faire une ancre)
  LogFormat "%h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" combined
+
 
  LogFormat "%h %l %u %t \"%r\" %>s %O" common
+
=== Les vhosts ===
  LogFormat "%{Referer}i -> %U" referer
+
 
  LogFormat "%{User-agent}i" agent
+
D'après la documentation d'Apache, voici la configuration préconisée :
 +
Cette configuration est "hors vhosts". Elle adresse donc le "serveur principal", ou "serveur par défaut".
 +
Je mets ici une redirection vers la page 404 : si on n'est pas dans un vhost prévu, on a rien à faire là... :)
 +
 
 +
Il est possible d'utiliser des noms d'hôtes dans la définition d'un serveur virtuel, mais ils seront résolus en adresses IP au démarrage du serveur.
 +
Si une résolution de nom échoue, cette définition de serveur virtuel sera ignorée.
 +
Cette méthode est par conséquent déconseillée.
 +
 
 +
 
 +
# Serveur "principal", qui répondra pour les vhosts non déclarés :
 +
  # interrogation d'Apache par l'IP par exemple, ou nom de domaine pointant vers le VPS sans qu'il soit déclaré dans Apache
 +
ServerName 178.32.102.151
 +
DocumentRoot /home/www/teteve/vps2
 +
 +
# La directive NameVirtualHost doit de préférence contenir une adresse IP et/ou un port (Joker * accepté)
 +
# C'est le couple IP/Port utilisé par Apache (doit être défini dans la directive "Listen"), pour lequel Apache doit filtrer les noms d'hôtes
 +
NameVirtualHost 178.32.102.151
 +
 +
<VirtualHost 178.32.102.151>
 +
  DocumentRoot /www/example.com
 +
ServerName www.example.com
 +
 +
# D'autres directives ici ...
 +
 +
</VirtualHost>
 +
   
 +
<VirtualHost 178.32.102.151>
 +
  DocumentRoot /www/example.org
 +
ServerName www.example.org
 
   
 
   
  Devient :
+
  # D'autres directives ici ...
 
   
 
   
  LogFormat "%v:%p %a %h %l %u %t \"%r\" %>s %T \"%{Referer}i\" \"%{User-Agent}i\"" vhost_combined
+
  </VirtualHost>
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
 
# Define an access log for VirtualHosts that don't define their own logfile
 
CustomLog /var/log/apache2/other_vhosts_access.log vhost_combined
 
 
 
=== Les vhosts ===
 
  
 
Voici un fichier de conf d'un Vhost :
 
Voici un fichier de conf d'un Vhost :
  '''NameVirtualHost www.toto.fr''' # A ne mettre que dans le fichier du vhost par défaut
+
   
  '''<VirtualHost www.toto.fr>''' # Nom du virtualhost (= par là où il sera appelé...)
+
  '''<VirtualHost www.toto.fr>''' # Nom du virtualhost (défini normalement dans la directive "NameVirtualHost")
 
         '''ServerAdmin webmaster@localhost''' # Mail du webmaster (pas trop compliqué à comprendre... :p)
 
         '''ServerAdmin webmaster@localhost''' # Mail du webmaster (pas trop compliqué à comprendre... :p)
 
         '''ServerName www.toto.fr''' # Nom du serveur
 
         '''ServerName www.toto.fr''' # Nom du serveur
 
         '''ServerAlias www2.toto.fr''' # Un éventuel alias
 
         '''ServerAlias www2.toto.fr''' # Un éventuel alias
         '''DocumentRoot /home/www/toto/'''
+
         '''DocumentRoot /home/www/toto'''
 
         '''<Directory />'''
 
         '''<Directory />'''
 
                 '''Options FollowSymLinks''' # Autorise à suivre les liens symboliques
 
                 '''Options FollowSymLinks''' # Autorise à suivre les liens symboliques
Ligne 103 : Ligne 121 :
 
         '''</Directory>'''
 
         '''</Directory>'''
 
         '''<Directory /home/www/secure/>'''
 
         '''<Directory /home/www/secure/>'''
                 # Config du répertoire sécurisé déjà vu précédemment
+
                 # Config du répertoire sécurisé (voir ci-dessous)
 
         '''</Directory>'''
 
         '''</Directory>'''
 
         ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/ # Pour la config des scripts CGI
 
         ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/ # Pour la config des scripts CGI
Ligne 128 : Ligne 146 :
 
  </VirtualHost>
 
  </VirtualHost>
  
=== restreindre l'accès à un répertoire ===
+
Liens pour approfondir les vhosts :
 +
http://httpd.apache.org/docs/2.4/fr/vhosts/details.html
 +
http://httpd.apache.org/docs/2.4/fr/vhosts/examples.html
 +
 +
== Les logs ==
  
Sous Apache, il existe 2 types d'authentification possible :
+
'''# EN COURS D'APPROFONDISSEMENT...'''
* mod_auth_basic
+
* mod_auth_digest
+
  LogFormat "%v:%p %h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" vhost_combined
 
+
  LogFormat "%h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" combined
pour activer le module mod_auth_digest :
+
  LogFormat "%h %l %u %t \"%r\" %>s %O" common
a2dismod mod_auth_basic
+
LogFormat "%{Referer}i -> %U" referer
a2enmod mod_auth_digest
+
LogFormat "%{User-agent}i" agent
/etc/init.d/apache2 restart
+
L'authentification Basic envoie le couple login/password en clair sur le réseau.
+
Devient :
Elle est donc déconseillée sans être couplée avec SSL.
+
   
L'authentification Digest utilise les condensés MD5. Attention : Digest est mal supporté par IE 6 et antérieur, à cause du non-respect des RFC de la part de IE (original... ^^).
+
  LogFormat "%v:%p %a %h %l %u %t \"%r\" %>s %T \"%{Referer}i\" \"%{User-Agent}i\"" vhost_combined
 
+
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
Il est possible de mettre les directives d'authentification soit dans le/les fichiers(s) de configuration d'apache (typiquement apache2.conf), soit directement dans les répertoires concernés grace aux fichiers .htaccess.
+
LogFormat "%h %l %u %t \"%r\" %>s %b" common
Il est conseillé, dans la mesure du possible, d'utiliser les directives <Directory> dans apache2.conf pour sécuriser les répertoires. Dans le cas contraire, Apache devra parcourir tous les répertoires à la recherche de fichiers .htaccess, ce qui risque d'amoindrir les performances.
+
LogFormat "%{Referer}i -> %U" referer
 
+
  LogFormat "%{User-agent}i" agent
  <Directory /home/www/secure/>
+
# Define an access log for VirtualHosts that don't define their own logfile
    AuthType Digest
+
CustomLog /var/log/apache2/other_vhosts_access.log vhost_combined
    AuthName "Zone securisee"
 
    AuthDigestDomain /secure/ http://www.teteve.fr/secure/
 
    AuthDigestProvider file
 
    AuthUserFile /etc/apache2/password
 
    Require valid-user
 
  </Directory>
 
 
 
créer le premier couple login/password :
 
  htdigest -c /ou/vous/voulez "Zone securisee" login1
 
Un prompt vous demande alors de taper le mot de passe, puis de le confirmer. Créer ensuite les couples login/password en enlevant l'option "-c" (pour "create").
 
  /etc/init.d/apache2 reload
 
 
 
== Quelques tips sur Apache2 ==
 
 
 
=== Les commandes apache2 ===
 
  root@test ~ # apache2 -h
 
  Usage: apache2 [-D name] [-d directory] [-f file]
 
              [-C "directive"] [-c "directive"]
 
              [-k start|restart|graceful|graceful-stop|stop]
 
              [-v] [-V] [-h] [-l] [-L] [-t] [-S] [-X]
 
Options:
 
  -D name            : define a name for use in <IfDefine name> directives
 
  -d directory      : Spécifie un répertoire racine specify an alternate initial ServerRoot
 
  -f file            : specify an alternate ServerConfigFile
 
  -C "directive"     : process directive before reading config files
 
  -c "directive"     : process directive after reading config files
 
  -e level          : show startup errors of level (see LogLevel)
 
  -E file            : log startup errors to file
 
  -v                : show version number
 
  -V                : show compile settings
 
  -h                 : list available command line options (this page)
 
  -l                 : list compiled in modules
 
  -L                : list available configuration directives
 
  -t -D DUMP_VHOSTS : show parsed settings (currently only vhost settings)
 
  -S                : a synonym for -t -D DUMP_VHOSTS
 
  -t -D DUMP_MODULES : show all loaded modules
 
  -M                : a synonym for -t -D DUMP_MODULES
 
  -t                : run syntax check for config files
 
  -X                : debug mode (only one worker, do not detach)
 
  
 
=== LogFormat ===
 
=== LogFormat ===
Ligne 253 : Ligne 236 :
 
  %{Referer}i - Le contenu de "Referer": Ligne(s) d'en-tête de la requête envoyée au serveur.
 
  %{Referer}i - Le contenu de "Referer": Ligne(s) d'en-tête de la requête envoyée au serveur.
 
  %{User-Agent}i - Le contenu de "User-Agent": Ligne(s) d'en-tête de la requête envoyée au serveur.
 
  %{User-Agent}i - Le contenu de "User-Agent": Ligne(s) d'en-tête de la requête envoyée au serveur.
 +
 +
== Quelques tips sur Apache2 ==
 +
 +
=== Les commandes apache2 ===
 +
root@test ~ # apache2 -h
 +
Usage: apache2 [-D name] [-d directory] [-f file]
 +
              [-C "directive"] [-c "directive"]
 +
              [-k start|restart|graceful|graceful-stop|stop]
 +
              [-v] [-V] [-h] [-l] [-L] [-t] [-S] [-X]
 +
Options:
 +
  -D name            : define a name for use in <IfDefine name> directives
 +
  -d directory      : Spécifie un répertoire racine specify an alternate initial ServerRoot
 +
  -f file            : specify an alternate ServerConfigFile
 +
  -C "directive"    : process directive before reading config files
 +
  -c "directive"    : process directive after reading config files
 +
  -e level          : show startup errors of level (see LogLevel)
 +
  -E file            : log startup errors to file
 +
  -v                : show version number
 +
  -V                : show compile settings
 +
  -h                : list available command line options (this page)
 +
  -l                : list compiled in modules
 +
  -L                : list available configuration directives
 +
  -t -D DUMP_VHOSTS  : show parsed settings (currently only vhost settings)
 +
  -S                : a synonym for -t -D DUMP_VHOSTS
 +
  -t -D DUMP_MODULES : show all loaded modules
 +
  -M                : a synonym for -t -D DUMP_MODULES
 +
  -t                : run syntax check for config files
 +
  -X                : debug mode (only one worker, do not detach)
 +
 +
=== restreindre l'accès à un répertoire ===
 +
 +
Sous Apache, il existe 2 types d'authentification possible :
 +
* mod_auth_basic
 +
* mod_auth_digest
 +
 +
pour activer le module mod_auth_digest :
 +
a2dismod mod_auth_basic
 +
a2enmod mod_auth_digest
 +
/etc/init.d/apache2 restart
 +
L'authentification Basic envoie le couple login/password en clair sur le réseau.
 +
Elle est donc déconseillée sans être couplée avec SSL.
 +
L'authentification Digest utilise les condensés MD5. Attention : Digest est mal supporté par IE 6 et antérieur, à cause du non-respect des RFC de la part de IE (original... ^^).
 +
 +
Il est possible de mettre les directives d'authentification soit dans le/les fichiers(s) de configuration d'apache (typiquement apache2.conf), soit directement dans les répertoires concernés grace aux fichiers .htaccess.
 +
Il est conseillé, dans la mesure du possible, d'utiliser les directives <Directory> dans apache2.conf pour sécuriser les répertoires. Dans le cas contraire, Apache devra parcourir tous les répertoires à la recherche de fichiers .htaccess, ce qui risque d'amoindrir les performances.
 +
 +
<Directory /home/www/secure/>
 +
    AuthType Digest
 +
    AuthName "Zone securisee"
 +
    AuthDigestDomain /secure/ http://www.teteve.fr/secure/
 +
    AuthDigestProvider file
 +
    AuthUserFile /etc/apache2/password
 +
    Require valid-user
 +
</Directory>
 +
 +
créer le premier couple login/password :
 +
htdigest -c /ou/vous/voulez "Zone securisee" login1
 +
Un prompt vous demande alors de taper le mot de passe, puis de le confirmer. Créer ensuite les couples login/password en enlevant l'option "-c" (pour "create").
 +
  service apache2 reload
  
 
[[Catégorie:Informatique]]
 
[[Catégorie:Informatique]]

Version actuelle datée du 13 juin 2017 à 14:51

Pré requis (installation)

Rien de bien compliqué pour l'installation :

# apt-get install apache2

Configuration

Les fichiers de conf

J'indique ici quelques lignes particulière du fichier de conf d'apache sur lesquelles je me suis penché...
Le fichier envvars :

export APACHE_RUN_USER=virtual
export APACHE_RUN_GROUP=www-data

-> Modifié pour que l'utilisateur FTP et l'utilisateur d'Apache soit le même. Permet les mises à jour automatiques de Wordpress sans utiliser de login/mdp FTP
-> Vérifier si besoin / si c'est mieux de remettre www-data...

# vim /etc/apache2/apache2.conf

# Indique si Apache doit essayer de faire une résolution DNS inversée sur les IP des clients
HostnameLookups Off

ServerRoot "/etc/apache2"
DirectoryIndex index.php index.html # Indique quel type de fichier index doit sélectionner apache par défaut

# Config perso des pages d'erreur
# Peut être défini plus précisément plus loin dans ce fichier
ErrorDocument 404 /404.html

# Les logs d'erreur sont peu configurables, à part leur emplacement et le niveau :
ErrorLog ${APACHE_LOG_DIR}/error.log
# Valeurs possibles pour les niveaux de log : debug, info, notice, warn, error, crit, alert, emerg.
LogLevel warn

# Modèle de sécurité par défaut des répertoires utilisés par Apache
# À analyser plus finement...
<Directory />
        Options FollowSymLinks
        AllowOverride None
        Require all denied
</Directory>

<Directory /usr/share>
        AllowOverride None
        Require all granted
</Directory>

<Directory /home/www/>
        Options Indexes FollowSymLinks
        AllowOverride None
        Require all granted
</Directory>

#<Directory /srv/>
#	Options Indexes FollowSymLinks
#	AllowOverride None
#	Require all granted
#</Directory>
# Configuration des logs :
# EN COURS D'APPROFONDISSEMENT...

VOIR LA PARTIE "LOGS" (faire une ancre)

Les vhosts

D'après la documentation d'Apache, voici la configuration préconisée : Cette configuration est "hors vhosts". Elle adresse donc le "serveur principal", ou "serveur par défaut". Je mets ici une redirection vers la page 404 : si on n'est pas dans un vhost prévu, on a rien à faire là... :)

Il est possible d'utiliser des noms d'hôtes dans la définition d'un serveur virtuel, mais ils seront résolus en adresses IP au démarrage du serveur.
Si une résolution de nom échoue, cette définition de serveur virtuel sera ignorée.
Cette méthode est par conséquent déconseillée.


# Serveur "principal", qui répondra pour les vhosts non déclarés :
# interrogation d'Apache par l'IP par exemple, ou nom de domaine pointant vers le VPS sans qu'il soit déclaré dans Apache
ServerName 178.32.102.151
DocumentRoot /home/www/teteve/vps2

# La directive NameVirtualHost doit de préférence contenir une adresse IP et/ou un port (Joker * accepté)
# C'est le couple IP/Port utilisé par Apache (doit être défini dans la directive "Listen"), pour lequel Apache doit filtrer les noms d'hôtes
NameVirtualHost 178.32.102.151

<VirtualHost 178.32.102.151>
DocumentRoot /www/example.com
ServerName www.example.com

# D'autres directives ici ...

</VirtualHost>

<VirtualHost 178.32.102.151>
DocumentRoot /www/example.org
ServerName www.example.org

# D'autres directives ici ...

</VirtualHost>

Voici un fichier de conf d'un Vhost :

<VirtualHost www.toto.fr> # Nom du virtualhost (défini normalement dans la directive "NameVirtualHost")
       ServerAdmin webmaster@localhost # Mail du webmaster (pas trop compliqué à comprendre... :p)
       ServerName www.toto.fr # Nom du serveur
       ServerAlias www2.toto.fr # Un éventuel alias
       DocumentRoot /home/www/toto
       <Directory />
               Options FollowSymLinks # Autorise à suivre les liens symboliques
               AllowOverride None
       </Directory>
       <Directory /home/www/toto/>
               # Indexes : Ne liste pas les fichiers d'un répertoire s'il n'y a pas de fichier index.*
               Options Indexes FollowSymLinks MultiViews
               AllowOverride None
               Order allow,deny
               allow from all
               # This directive allows us to have apache2's default start page
               # in /apache2-default/, but still have / go to the right place
               # RedirectMatch ^/$ www.toto.fr
       </Directory>
       <Directory /home/www/secure/>
               # Config du répertoire sécurisé (voir ci-dessous)
       </Directory>
       ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/ # Pour la config des scripts CGI
       <Directory "/usr/lib/cgi-bin">
               # A approfondir
       </Directory>
       ErrorLog /var/log/apache2/error.log
       # Si besoin de logs particuliers pour le vhost :
       # Valeurs possibles : debug, info, notice, warn, error, crit, alert, emerg.
       # Non utilisées actuellement
       #LogLevel warn
       #CustomLog /var/log/apache2/access.log combined
</VirtualHost>

Ne pas oublier de rajouter le nom du vhost dans /etc/hosts

Petite astuce pour désactiver l'accès à votre serveur par son IP publique :
Dans le fichier de conf du vhost "default", rajouter ceci à la fin. Ça peut être utile pour éviter les scans de port et les bots. Totalement inutile si le DNS est public...
A éviter pour un site web souhaitant être référencé !!! :)

<VirtualHost *:80>
  ServerName VOTRE.IP.PUB.LIQUE
  <Directory />
    Deny from all
  </Directory>
</VirtualHost>

Liens pour approfondir les vhosts : http://httpd.apache.org/docs/2.4/fr/vhosts/details.html http://httpd.apache.org/docs/2.4/fr/vhosts/examples.html

Les logs

# EN COURS D'APPROFONDISSEMENT...

LogFormat "%v:%p %h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" vhost_combined
LogFormat "%h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%h %l %u %t \"%r\" %>s %O" common
LogFormat "%{Referer}i -> %U" referer
LogFormat "%{User-agent}i" agent

Devient :

LogFormat "%v:%p %a %h %l %u %t \"%r\" %>s %T \"%{Referer}i\" \"%{User-Agent}i\"" vhost_combined
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
# Define an access log for VirtualHosts that don't define their own logfile
CustomLog /var/log/apache2/other_vhosts_access.log vhost_combined

LogFormat

Directives présentes dans le fichier /etc/apache2/apache.conf d'après La documentation Ubuntu

# 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 %h %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

Celles que j'ai dans le mien :

LogFormat "%v %a %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" vhost_combined
#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
#
# Define an access log for VirtualHosts that don't define their own logfile
CustomLog /var/log/apache2/other_vhosts_access.log vhost_combined

Explications :
LogFormat "%v %a %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" vhost_combined
%v - Nom canonique de ServerName du serveur qui répond à la requête.
%a - Adresse ip distante.
%u - Utilisateur distant (de l'authentification; peut être faux si le  code de retour de statut (%s) est 401)
%t - Heure à laquelle la requête a été reçue (format standard anglais mois jour année )
"%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.
%b - Taille de la réponse en octets, excluant l'entête HTTP au format CLF. (obligatoire pour Awstats)
%{Referer}i - Le contenu de "Referer": Ligne(s) d'en-tête de la requête envoyée au serveur.
%{User-Agent}i - Le contenu de "User-Agent": Ligne(s) d'en-tête de la requête envoyée au serveur.

Quelques tips sur Apache2

Les commandes apache2

root@test ~ # apache2 -h
Usage: apache2 [-D name] [-d directory] [-f file]
              [-C "directive"] [-c "directive"]
              [-k start|restart|graceful|graceful-stop|stop]
              [-v] [-V] [-h] [-l] [-L] [-t] [-S] [-X]
Options:
 -D name            : define a name for use in <IfDefine name> directives
 -d directory       : Spécifie un répertoire racine specify an alternate initial ServerRoot
 -f file            : specify an alternate ServerConfigFile
 -C "directive"     : process directive before reading config files
 -c "directive"     : process directive after reading config files
 -e level           : show startup errors of level (see LogLevel)
 -E file            : log startup errors to file
 -v                 : show version number
 -V                 : show compile settings
 -h                 : list available command line options (this page)
 -l                 : list compiled in modules
 -L                 : list available configuration directives
 -t -D DUMP_VHOSTS  : show parsed settings (currently only vhost settings)
 -S                 : a synonym for -t -D DUMP_VHOSTS
 -t -D DUMP_MODULES : show all loaded modules
 -M                 : a synonym for -t -D DUMP_MODULES
 -t                 : run syntax check for config files
 -X                 : debug mode (only one worker, do not detach)

restreindre l'accès à un répertoire

Sous Apache, il existe 2 types d'authentification possible :

  • mod_auth_basic
  • mod_auth_digest

pour activer le module mod_auth_digest :

a2dismod mod_auth_basic
a2enmod mod_auth_digest
/etc/init.d/apache2 restart

L'authentification Basic envoie le couple login/password en clair sur le réseau. Elle est donc déconseillée sans être couplée avec SSL. L'authentification Digest utilise les condensés MD5. Attention : Digest est mal supporté par IE 6 et antérieur, à cause du non-respect des RFC de la part de IE (original... ^^).

Il est possible de mettre les directives d'authentification soit dans le/les fichiers(s) de configuration d'apache (typiquement apache2.conf), soit directement dans les répertoires concernés grace aux fichiers .htaccess. Il est conseillé, dans la mesure du possible, d'utiliser les directives <Directory> dans apache2.conf pour sécuriser les répertoires. Dans le cas contraire, Apache devra parcourir tous les répertoires à la recherche de fichiers .htaccess, ce qui risque d'amoindrir les performances.

<Directory /home/www/secure/>
    AuthType Digest
    AuthName "Zone securisee"
    AuthDigestDomain /secure/ http://www.teteve.fr/secure/
    AuthDigestProvider file
    AuthUserFile /etc/apache2/password
    Require valid-user
</Directory>

créer le premier couple login/password :

htdigest -c /ou/vous/voulez "Zone securisee" login1

Un prompt vous demande alors de taper le mot de passe, puis de le confirmer. Créer ensuite les couples login/password en enlevant l'option "-c" (pour "create").

 service apache2 reload