Apache : Différence entre versions

De Teteve wiki
Aller à : navigation, rechercher
(Configuration)
Ligne 8 : Ligne 8 :
  
 
J'indique ici quelques lignes particulière du fichier de conf d'apache sur lesquelles je me suis penché...
 
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
 
  # vim /etc/apache2/apache2.conf

Version du 9 juin 2017 à 12:04

Pré requis (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
ServerRoot "/etc/apache2"
DirectoryIndex index.php index.html # Indique quel type de fichier index doit sélectionner apache par défaut
# Les logs d'erreur sont peu configurables, à part leur emplacement et le niveau :
ErrorLog /var/log/apache2/error.log
# Valeurs possibles pour les niveaux de log : debug, info, notice, warn, error, crit, alert, emerg.
LogLevel warn

# Configuration des logs :
# EN COURS D'APPROFONDISSEMENT...
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

# Informations que renvoie Apache en cas d'erreur ou dans les headers
ServerTokens Prod
ServerSignature Off

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


Les vhosts

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é...)
       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é déjà vu précédemment
       </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>

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").

 /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

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.

PhpMyAdmin

L'installation de PhpMyAdmin se fait dans la foulée après celle de Mysql et Php :

# apt-get install phpmyadmin

Editer le fichier de configuration d'Apache :

# vim /etc/apache2/apache2.conf

Rajouter la ligne suivante :

include /etc/phpmyadmin/apache.conf

Pour accéder ensuite à l'interface de PhpMyAdmin, il suffit de se rendre sur le site web (ou en localhost si le serveur web n'est pas opérationnel) :

http://localhost/phpmyadmin

note : PhpMyAdmin utilise les identifiants de l'admin de Mysql tels que définis à l'installation de Mysql