Apache

De Wiki de Jordan LE NUFF
Sauter à la navigation Sauter à la recherche
(Contenu remplacé par « ==Présentation== Cette page a pour objet de lister les gestes techniques liées au serveur web Apache. Plus d'informations sur le site de l'éditeur : *Apache 2.2 :… »)
Balise : Contenu remplacé
 
(5 révisions intermédiaires par le même utilisateur non affichées)
Ligne 1 : Ligne 1 :
−
== Présentation ==
+
==Présentation==
 
Cette page a pour objet de lister les gestes techniques liées au serveur web Apache.
 
Cette page a pour objet de lister les gestes techniques liées au serveur web Apache.
  
Ligne 6 : Ligne 6 :
 
*Apache 2.4 : http://httpd.apache.org/docs/2.4/fr/
 
*Apache 2.4 : http://httpd.apache.org/docs/2.4/fr/
  
−
==Administration simple==
+
== Liste des sous-pages==
−
===Localisation de la commande Apache===
+
{{#subpages:default=''}}
−
Pour identifier où est localisée la commande <code>httpd</code>, lancer la commande suivante :
 
−
find /local/www -name httpd
 
−
 
 
−
<u>Exemple de retour :</u>
 
−
/local/www/2.4.12/bin/httpd
 
−
 
 
−
Pour ajouter la commande dans le PATH afin de ne pas à avoir la chercher à chaque fois, créer un fichier <code>/etc/profile/httpd.sh</code> et y ajouter le contenu suivant :
 
−
PATH=$PATH:/local/www/2.4.12/bin
 
−
 
 
−
Enregistrer le fichier. Le sourcer pour une prise en compte immédiate avec la commande :
 
−
. /etc/profile/httpd.sh
 
−
 
 
−
Le binaire <code>httpd</code> est désormais dans le PATH. Pour le vérifier, taper :
 
−
which httpd
 
−
 
 
−
<u>Exemple de retour :</u>
 
−
/local/www/2.4.12/bin/httpd
 
−
 
 
−
===Gestion du processus Apache===
 
−
Démarrer Apache :
 
−
httpd -k start
 
−
 
 
−
Arrêter Apache subitement :
 
−
httpd -k stop
 
−
 
 
−
Arrêter Apache proprement :
 
−
httpd -k graceful-stop
 
−
 
 
−
Redémarrer Apache subitment :
 
−
httpd -k restart
 
−
 
 
−
Redémarrer Apache proprement :
 
−
httpd -k graceful
 
−
 
 
−
Afficher les vhosts configurés et la configuration en cours :
 
−
httpd -S
 
−
 
 
−
Afficher les modules chargés :
 
−
httpd -M
 
−
 
 
−
Vérifier la syntax du/des fichier(s) de configuration :
 
−
httpd -t
 
−
 
 
−
== Gestion des logs ==
 
−
=== Log par proxy ===
 
−
Pour logger les adresses IP distantes, qui passent par un proxy donc, il faut ajouter la directive suivante dans le fichier <code>/local/www/current/conf/httpd.conf</code> dans la section <code>log_config_module</code> :
 
−
<syntaxhighlight lang="apache" highlight="6-8">
 
−
<IfModule log_config_module>
 
−
...
 
−
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
 
−
LogFormat "%h %l %u %t \"%r\" %>s %b" common
 
−
 
 
−
<IfModule proxy_module>
 
−
LogFormat "%{X-Forwarded-For}i %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" proxy
 
−
</IfModule>
 
−
 
 
−
<IfModule logio_module>
 
−
# You need to enable mod_logio.c to use %I and %O
 
−
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %I %O" combinedio
 
−
</IfModule>
 
−
...
 
−
</IfModule>
 
−
</syntaxhighlight>
 
−
 
 
−
Cette ligne permet de déclarer un format de log spécifique, nommé <code>proxy</code>. La variable <code>%{X-Forwarded-For}i</code> représente l'adresse IP distante qui a envoyé la requête au proxy.
 
−
 
 
−
Une fois ce format déclaré, il faut l'appliquer aux requêtes "proxyfiées". Pour ce faire, dans la section <code>VirtualHost</code> correspond à l'application à logger, il faut ajouter/modifier les lignes suivantes :
 
−
<syntaxhighlight lang="apache" highlight="3-5">
 
−
<VirtualHost *:80>
 
−
...
 
−
SetEnvIf X-Forwarded-For "^.*\..*\..*\..*" forwarded
 
−
CustomLog "|/usr/sbin/rotatelogs -n 5 /data/logs/${url_app}/${url_app}_http_access.log 10M" proxy env=forwarded
 
−
CustomLog "|/usr/sbin/rotatelogs -n 5 /data/logs/${url_app}/${url_app}_http_access.log 10M" combined env=!forwarded
 
−
ErrorLog "|/usr/sbin/rotatelogs -n 5 /data/logs/${url_app}/${url_app}_http_error.log 10M"
 
−
...
 
−
</VirtualHost>
 
−
</syntaxhighlight>
 
−
 
 
−
La directive <code>SetEnvIf</code> permet de définir une variable <code>forwarded</code> uniquement si un en-tête <code>X-Forwarded-For</code> est déclaré dans la requête et qu'il respecte l'expression régulière <code>^.*\..*\..*\..*</code>. Plus d'informations sur [https://httpd.apache.org/docs/2.4/fr/mod/mod_setenvif.html#setenvif la documentation officielle d'Apache sur la directive SetEnvIf].
 
−
 
 
−
La partie <code>proxy env=forwarded</code> indique d'utiliser le format de log <code>proxy</code> dans le cas ou la variable <code>forwarded</code> existe.
 
−
 
 
−
La partie <code>combined env=!forwarded</code> indique d'utiliser le format de log <code>combined</code> dans le cas ou la variable <code>forwarded</code> n'existe pas.
 
−
 
 
−
=== Rotation des logs ===
 
−
Il est possible d'intégrer une rotation des logs directement dans la configuration Apache.
 
−
 
 
−
Pour ce faire, il faut avant tout localiser la commande '''rotatelogs''' sur le serveur dans le dossier des binaires d'Apache avec la commande suivante :
 
−
find /local/www/current -name rotatelogs
 
−
 
 
−
<u>Exemple de retour :</u>
 
−
/local/www/current/bin/rotatelogs
 
−
 
 
−
Une fois la commande localisée, adapter la déclaration des fichiers de logs dans la configuration Apache.
 
−
 
 
−
<u>Exemple de configuration de rotation de logs :</u>
 
−
<syntaxhighlight lang="apache">
 
−
<VirtualHost *:80>
 
−
ServerName pprd-appli.mydomain.com
 
−
DocumentRoot "/data/www/PREPROD/appli/"
 
−
ErrorLog "|/local/www/current/bin/rotatelogs -l -f -n 15 /data/logs/${app_name}/${url_app}_http_error.log 10M"
 
−
CustomLog "|/local/www/current/bin/rotatelogs -l -f -n 15 /data/logs/${app_name}/${url_app}_http_access.log 10M" combined
 
−
LogLevel debug
 
−
<Directory "/data/www/PREPROD/appli/">
 
−
DirectoryIndex index.php
 
−
Options FollowSymLinks
 
−
AllowOverride All
 
−
Require all granted
 
−
</Directory>
 
−
</VirtualHost>
 
−
</syntaxhighlight>
 
−
 
 
−
Les logs sont paramétrés pour ne tourner que sur 15 fichiers d'une taille maximale de 10M.
 
−
 
 
−
Plus d'informations sur la documentation officielle d'Apache : https://httpd.apache.org/docs/2.4/fr/programs/rotatelogs.html.
 
−
 
 
−
== Configuration modèle ==
 
−
 
 
−
Voici un modèle de configuration Apache s'appuyant sur des variables de configuration (grâce à [http://httpd.apache.org/docs/2.4/mod/core.html#define Define et UnDefine]) dont il est possible de s'inspirer pour chaque nouveau ''vhost'' :
 
−
 
 
−
=== Exemple Hors Prod ===
 
−
<syntaxhighlight lang="apache">
 
−
Define app_name appli.mydomain.com
 
−
# Appli de développement
 
−
<VirtualHost *:80>
 
−
Define url_app dev-${app_name}
 
−
ServerName ${url_app}
 
−
DocumentRoot "/data/www/DEV/appli/public"
 
−
ErrorLog "|/local/www/current/bin/rotatelogs -l -f -n 15 /data/logs/${app_name}/${url_app}_http_error.log 10M"
 
−
CustomLog "|/local/www/current/bin/rotatelogs -l -f -n 15 /data/logs/${app_name}/${url_app}_http_access.log 10M" combined
 
−
LogLevel debug
 
−
 
−
php_flag log_errors on
 
−
php_flag display_errors off
 
−
# 32767 for E_ALL, 8 for E_NOTICE, 2 for E_WARNING, 1 for E_ERROR
 
−
# More information on https://www.php.net/manual/fr/errorfunc.constants.php
 
−
php_value error_reporting "8"
 
−
php_value error_log /data/logs/${app_name}/${url_app}_php_error.log
 
−
 
 
−
<Directory "/data/www/DEV/appli/public">
 
−
DirectoryIndex index.html index.php
 
−
Options FollowSymLinks
 
−
AllowOverride All
 
−
Require all granted
 
−
</Directory>
 
−
UnDefine url_app
 
−
</VirtualHost>
 
−
 
 
−
# Appli d'intégration
 
−
<VirtualHost *:80>
 
−
Define url_app int-${app_name}
 
−
ServerName ${url_app}
 
−
DocumentRoot "/data/www/INT/appli/public"
 
−
ErrorLog "|/local/www/current/bin/rotatelogs -l -f -n 15 /data/logs/${app_name}/${url_app}_http_error.log 10M"
 
−
CustomLog "|/local/www/current/bin/rotatelogs -l -f -n 15 /data/logs/${app_name}/${url_app}_http_access.log 10M" combined
 
−
LogLevel debug
 
−
 
−
php_flag log_errors on
 
−
php_flag display_errors off
 
−
# 32767 for E_ALL, 8 for E_NOTICE, 2 for E_WARNING, 1 for E_ERROR
 
−
# More information on https://www.php.net/manual/fr/errorfunc.constants.php
 
−
php_value error_reporting "8"
 
−
php_value error_log /data/logs/${app_name}/${url_app}_php_error.log
 
−
 
−
<Directory "/data/www/INT/appli/public">
 
−
DirectoryIndex index.html index.php
 
−
Options FollowSymLinks
 
−
AllowOverride All
 
−
Require all granted
 
−
</Directory>
 
−
UnDefine url_app
 
−
</VirtualHost>
 
−
 
 
−
# Appli de recette
 
−
<VirtualHost *:80>
 
−
Define url_app rec-${app_name}
 
−
ServerName ${url_app}
 
−
DocumentRoot "/data/www/REC/appli/public"
 
−
ErrorLog "|/local/www/current/bin/rotatelogs -l -f -n 15 /data/logs/${app_name}/${url_app}_http_error.log 10M"
 
−
CustomLog "|/local/www/current/bin/rotatelogs -l -f -n 15 /data/logs/${app_name}/${url_app}_http_access.log 10M" combined
 
−
LogLevel debug
 
−
 
−
php_flag log_errors on
 
−
php_flag display_errors off
 
−
# 32767 for E_ALL, 8 for E_NOTICE, 2 for E_WARNING, 1 for E_ERROR
 
−
# More information on https://www.php.net/manual/fr/errorfunc.constants.php
 
−
php_value error_reporting "8"
 
−
php_value error_log /data/logs/${app_name}/${url_app}_php_error.log
 
−
 
−
<Directory "/data/www/REC/appli/public">
 
−
DirectoryIndex index.html index.php
 
−
Options FollowSymLinks
 
−
AllowOverride All
 
−
Require all granted
 
−
</Directory>
 
−
UnDefine url_app
 
−
</VirtualHost>
 
−
 
 
−
# Appli de préproduction
 
−
<VirtualHost *:80>
 
−
Define url_app pprd-${app_name}
 
−
ServerName ${url_app}
 
−
DocumentRoot "/data/www/PREPROD/appli/public"
 
−
ErrorLog "|/local/www/current/bin/rotatelogs -l -f -n 15 /data/logs/${app_name}/${url_app}_http_error.log 10M"
 
−
CustomLog "|/local/www/current/bin/rotatelogs -l -f -n 15 /data/logs/${app_name}/${url_app}_http_access.log 10M" combined
 
−
LogLevel debug
 
−
 
−
php_flag log_errors on
 
−
php_flag display_errors off
 
−
# 32767 for E_ALL, 8 for E_NOTICE, 2 for E_WARNING, 1 for E_ERROR
 
−
# More information on https://www.php.net/manual/fr/errorfunc.constants.php
 
−
php_value error_reporting "8"
 
−
php_value error_log /data/logs/${app_name}/${url_app}_php_error.log
 
−
 
−
<Directory "/data/www/PREPROD/current/public">
 
−
DirectoryIndex index.html index.php
 
−
Options FollowSymLinks
 
−
AllowOverride All
 
−
Require all granted
 
−
</Directory>
 
−
UnDefine url_app
 
−
</VirtualHost>
 
−
UnDefine app_name
 
−
</syntaxhighlight>
 
−
 
 
−
Penser à créer les dossiers <code>/data/logs/${app_name}</code> et fichiers de logs associés <code>/data/logs/${app_name}/${url_app}_*</code> :
 
−
 
 
−
<u>Exemple pour l'application myapp.jordan-lenuff.com sur le serveur hors production :</u>
 
−
mkdir -p /data/logs/myapp.jordan-lenuff.com
 
−
touch /data/logs/myapp.jordan-lenuff.com/{dev,rec,int,pprd}-myapp.jordan-lenuff.com_{http_{error,access},php_error}.log
 
−
chown -R www:www /data/logs/myapp.jordan-lenuff.com
 
−
 
 
−
=== Exemple Production ===
 
−
<syntaxhighlight lang="apache">
 
−
Define app_name myapp.jordan-lenuff.com
 
−
# Instance de production
 
−
<VirtualHost *:80>
 
−
Define url_app ${app_name}
 
−
ServerName ${url_app}
 
−
DocumentRoot "/data/www/appli/public"
 
−
ErrorLog "|/local/www/current/bin/rotatelogs -l -f -n 15 /data/logs/${app_name}/${url_app}_http_error.log 10M"
 
−
CustomLog "|/local/www/current/bin/rotatelogs -l -f -n 15 /data/logs/${app_name}/${url_app}_http_access.log 10M" combined
 
−
LogLevel debug
 
−
 
−
php_flag log_errors on
 
−
php_flag display_errors off
 
−
# 32767 for E_ALL, 8 for E_NOTICE, 2 for E_WARNING, 1 for E_ERROR
 
−
# More information on https://www.php.net/manual/fr/errorfunc.constants.php
 
−
php_value error_reporting "8"
 
−
php_value error_log /data/logs/${app_name}/${url_app}_php_error.log
 
−
 
−
<Directory "/data/www/appli/public">
 
−
DirectoryIndex index.html index.php
 
−
Options FollowSymLinks
 
−
AllowOverride All
 
−
Require all granted
 
−
</Directory>
 
−
UnDefine url_app
 
−
</VirtualHost>
 
−
UnDefine app_name
 
−
</syntaxhighlight>
 
−
 
 
−
Penser à créer les dossier <code>/data/logs/${app_name}</code> et fichiers de logs associés <code>/data/logs/${app_name}/${url_app}_*</code> :
 
−
 
 
−
<u>Exemple pour l'application myapp.jordan-lenuff.com sur le serveur de production :</u>
 
−
mkdir -p /data/logs/myapp.jordan-lenuff.com
 
−
touch /data/logs/myapp.jordan-lenuff.com/myapp.jordan-lenuff.com_{http_error.log,http_access.log,php_error.log}
 
−
chown -R www:www /data/logs/myapp.jordan-lenuff.com
 
−
 
 
−
=== Mise en oeuvre ===
 
−
Par exemple, pour le site de développement de myapp.jordan-lenuff.com, il va falloir :
 
−
*créer le dossier <code>/data/www/DEV/myapp.jordan-lenuff.com</code>
 
−
*créer le dossier de log <code>/data/logs/myapp.jordan-lenuff.com</code>
 
−
*créer les fichiers de logs http_access.log, http_error.log et php_error.log
 
−
*créer le fichier de configuration <code>/local/www/current/conf/vhosts/myapp.jordan-lenuff.com.conf</code>
 
−
 
 
−
Dans la pratique, cela donnera les commandes suivantes :
 
−
{{terminal|text=
 
−
mkdir -p /data/www/DEV/myapp.jordan-lenuff.com
 
−
chown www:www /data/www/DEV/myapp.jordan-lenuff.com
 
−
mkdir -p /data/logs/myapp.jordan-lenuff.com
 
−
touch /data/logs/myapp.jordan-lenuff.com/myapp.jordan-lenuff.com_{http_{access,error},php_error}.log
 
−
chown -R www:www /data/logs/myapp.jordan-lenuff.com
 
−
vi /local/www/current/conf/vhosts/myapp.jordan-lenuff.com
 
−
}}
 
−
dont le contenu du fichier <code>/local/www/current/conf/vhosts/myapp.jordan-lenuff.com.conf</code> sera le suivant :
 
−
<syntaxhighlight lang="apache">
 
−
Define app_name myapp.jordan-lenuff.com
 
−
# Instance de développement
 
−
<VirtualHost *:80>
 
−
Define url_app dev-${app_name}
 
−
ServerName ${url_app}
 
−
DocumentRoot "/data/www/DEV/myapp.jordan-lenuff.com"
 
−
ErrorLog "|/local/www/current/bin/rotatelogs -l -f -n 15 /data/logs/${app_name}/${url_app}_http_error.log 10M"
 
−
CustomLog "|/local/www/current/bin/rotatelogs -l -f -n 15 /data/logs/${app_name}/${url_app}_http_access.log 10M" combined
 
−
LogLevel debug
 
−
 
−
php_flag log_errors on
 
−
php_flag display_errors off
 
−
# 32767 for E_ALL, 8 for E_NOTICE, 2 for E_WARNING, 1 for E_ERROR
 
−
# More information on https://www.php.net/manual/fr/errorfunc.constants.php
 
−
php_value error_reporting "8"
 
−
php_value error_log /data/logs/${app_name}/${url_app}_php_error.log
 
−
 
−
<Directory "/data/www/DEV/myapp.jordan-lenuff.com">
 
−
DirectoryIndex index.html index.php
 
−
Options FollowSymLinks
 
−
AllowOverride All
 
−
Require all granted
 
−
</Directory>
 
−
UnDefine url_app
 
−
</VirtualHost>
 
−
UnDefine app_name
 
−
</syntaxhighlight>
 
−
 
 
−
== Autoriser plusieurs dossiers ==
 
−
 
 
−
Dans le cas où il n'est pas envisageable de modifier la configuration Apache à chaque création d'un nouveau dossier, il est possible de donner accès à des dossiers correspondant à une expression régulière (voir [https://httpd.apache.org/docs/2.4/fr/mod/core.html#directory la documentation à propos de la directive Directory]). Voici un exemple :
 
−
 
 
−
<syntaxhighlight lang="apache">
 
−
# Appli de recette
 
−
<VirtualHost *:80>
 
−
ServerAdmin mymail@mydomain.com
 
−
DocumentRoot "/data/www/REC"
 
−
ServerName rec-appli.mydomain.com
 
−
RewriteEngine On
 
−
ErrorLog "|/usr/sbin/rotatelogs -n 5 /data/logs/rec-appli.mydomain.com_http_error.log 10M"
 
−
CustomLog "|/usr/sbin/rotatelogs -n 5 /data/logs/rec-appli.mydomain.com_http_access.log 10M" combined
 
−
php_flag log_errors on
 
−
php_flag display_errors off
 
−
# 32767 for E_ALL, 8 for E_NOTICE, 2 for E_WARNING, 1 for E_ERROR
 
−
# More information on https://www.php.net/manual/fr/errorfunc.constants.php
 
−
php_value error_reporting "8"
 
−
php_value error_log /data/logs/rec-appli.mydomain.com_php_error.log
 
−
LogLevel debug
 
−
 
−
<Directory ~ "/data/www/REC/appli.*">
 
−
Options FollowSymLinks
 
−
AllowOverride All
 
−
Order allow,deny
 
−
Allow from All
 
−
</Directory>
 
−
</VirtualHost>
 
−
</syntaxhighlight>
 
−
 
 
−
Dans cet exemple, seuls les dossiers commençant par <code>/data/www/REC/appli</code> seront publiés.
 
−
 
 
−
==Erreurs connues==
 
−
===Forbidden You don't have permission to access===
 
−
Derrière l'erreur "Forbidden You don't have permission to access [...]" peuvent se cacher de nombreuses causes.
 
−
====Vérifier les droits====
 
−
Il faut vérifier que l'utilisateur du processus ''Apache'' possède bien les droits d'accès au dossier/fichier concerné par l'erreur. Il faut également vérifier que l'existence dudit fichier/dossier.
 
−
====Cohérence du contrôle d'accès====
 
−
Avec Apache 2.2, [https://httpd.apache.org/docs/2.4/fr/howto/access.html la gestion du contrôle d'accès] se faisait avec les directives <code>Order Allow, Deny</code>.
 
−
 
 
−
Avec Apache 2.4, bien que les directives <code>Order Allow, Deny</code> soient encore supportées, la gestion du contrôle d'accès se fait désormais avec la directive <code>Require</code>.
 
−
 
 
−
En 2.4, si, dans la configuration d'un vhost, il est utilisé une gestion d'accès différente de celle utilisé dans la configuration principale d'Apache, l'erreur ''Forbidden You don't have permission to access'' apparaîtra.
 
−
 
 
−
Il faut donc vérifier que la gestion d'accès utilisée est la même pour la configuration principale d'Apache et de ses vhosts.
 
−
 
 
−
===AH00037: Symbolic link not allowed or link target not accessible===
 
−
====Vérifier les droits====
 
−
Il faut vérifier que l'utilisateur du processus ''Apache'' possède bien les droits d'accès au lien concerné par l'erreur. Il faut également vérifier que l'existence dudit lien.
 
−
 
 
−
====Combinaison de sections====
 
−
Sur Apache 2.4, [http://httpd.apache.org/docs/2.4/fr/sections.html#merging les sections sont combinées selon un ordre bien défini].
 
−
 
 
−
Plus particulièrement, ''"Les sections situées à l'intérieur de sections <code><VirtualHost></code> sont appliquées après les sections correspondantes situées en dehors de la définition de l'hôte virtuel, ce qui permet à l'hôte virtuel de prévaloir sur la configuration du serveur principal."''
 
−
 
 
−
De ce fait, l'erreur ''"AH00037: Symbolic link not allowed or link target not accessible"'' peut être due à directive <code>Options None</code> définie dans la configuration principale d'Apache. Pour corriger cette situation, aller dans le fichier <code>/local/www/<version>/conf/httpd.conf</code> et remplacer la section :
 
−
<syntaxhighlight lang="apache">
 
−
<Directory />
 
−
AllowOverride None
 
−
Require all denied
 
−
Options None
 
−
</Directory>
 
−
</syntaxhighlight>
 
−
par :
 
−
<syntaxhighlight lang="apache">
 
−
<Directory />
 
−
AllowOverride None
 
−
Require all denied
 
−
</Directory>
 
−
</syntaxhighlight>
 
−
 
 
−
Relancer Apache pour prise en compte des modifications :
 
−
httpd -k graceful
 

Version actuelle datée du 14 mai 2020 à 09:37

Présentation

Cette page a pour objet de lister les gestes techniques liées au serveur web Apache.

Plus d'informations sur le site de l'éditeur :

Liste des sous-pages