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é
 
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 myapp.jordan-lenuff.com
 
−
Define doc_root_parent "/data/www/REGAZ"
 
−
Define doc_root_child "MyRegaz/APPLI/public"
 
−
# Instance de développement
 
−
<VirtualHost *:80>
 
−
Define url_app dev-${app_name}
 
−
ServerName ${url_app}
 
−
DocumentRoot "${doc_root_parent}/DEV"
 
−
ErrorLog "|/local/www/current/bin/rotatelogs -t -l -n 15 /data/logs/${app_name}/${url_app}_http_error.log 10M"
 
−
CustomLog "|/local/www/current/bin/rotatelogs -t -l -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
 
−
 
 
−
# Les deux lignes ci-dessous permettent d'appeler l'application pour chaque dossier des développeurs contenant l'application
 
−
# exemple : http://dev-www.myapp.com/TOTO pointera automatiquement vers le dossier ${doc_root_parent}/DEV/TOTO/${doc_root_child}
 
−
AliasMatch "^/([[:alpha:]]+)(/.*)?" "${doc_root_parent}/DEV/$1/${doc_root_child}$2"
 
−
<Directory "${doc_root_parent}/DEV/*/${doc_root_child}">
 
−
DirectoryIndex index.html index.php
 
−
Options FollowSymLinks
 
−
AllowOverride All
 
−
Require all granted
 
−
</Directory>
 
−
UnDefine url_app
 
−
</VirtualHost>
 
−
 
 
−
# Instance de intégration
 
−
<VirtualHost *:80>
 
−
Define url_app int-${app_name}
 
−
ServerName ${url_app}
 
−
DocumentRoot "${doc_root_parent}/INTEGRATION/${doc_root_child}"
 
−
ErrorLog "|/local/www/current/bin/rotatelogs -t -l -n 15 /data/logs/${app_name}/${url_app}_http_error.log 10M"
 
−
CustomLog "|/local/www/current/bin/rotatelogs -t -l -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 "32767"
 
−
php_value error_log /data/logs/${app_name}/${url_app}_php_error.log
 
−
 
−
<Directory "${doc_root_parent}/INTEGRATION/${doc_root_child}">
 
−
DirectoryIndex index.html index.php
 
−
AllowOverride All
 
−
Require all granted
 
−
</Directory>
 
−
UnDefine url_app
 
−
</VirtualHost>
 
−
 
 
−
# Instance de recette
 
−
<VirtualHost *:80>
 
−
Define url_app rec-${app_name}
 
−
ServerName ${url_app}
 
−
DocumentRoot "${doc_root_parent}/REC/${doc_root_child}"
 
−
ErrorLog "|/local/www/current/bin/rotatelogs -t -l -n 15 /data/logs/${app_name}/${url_app}_http_error.log 10M"
 
−
CustomLog "|/local/www/current/bin/rotatelogs -t -l -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 "32767"
 
−
php_value error_log /data/logs/${app_name}/${url_app}_php_error.log
 
−
 
−
<Directory "${doc_root_parent}/REC/${doc_root_child}">
 
−
DirectoryIndex index.html index.php
 
−
AllowOverride All
 
−
Require all granted
 
−
</Directory>
 
−
UnDefine url_app
 
−
</VirtualHost>
 
−
 
 
−
# Instance de préproduction
 
−
<VirtualHost *:80>
 
−
Define url_app pprd-${app_name}
 
−
ServerName ${url_app}
 
−
DocumentRoot "${doc_root_parent}/PREPROD/${doc_root_child}"
 
−
ErrorLog "|/local/www/current/bin/rotatelogs -t -l -n 15 /data/logs/${app_name}/${url_app}_http_error.log 10M"
 
−
CustomLog "|/local/www/current/bin/rotatelogs -t -l -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 "32767"
 
−
php_value error_log /data/logs/${app_name}/${url_app}_php_error.log
 
−
 
 
−
<Directory "${doc_root_parent}/PREPROD/${doc_root_child}">
 
−
DirectoryIndex index.html index.php
 
−
AllowOverride All
 
−
Require all granted
 
−
SetEnv APP_ENV "pprd"
 
−
</Directory>
 
−
UnDefine url_app
 
−
</VirtualHost>
 
−
UnDefine doc_root_child
 
−
UnDefine doc_root_parent
 
−
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>
 
−
 
 
−
== Configuration exemple SSL ==
 
−
 
 
−
<syntaxhighlight lang="apache">
 
−
Define app_name myapp.jordan-lenuff.com
 
−
# Instance de développement
 
−
<VirtualHost *:443>
 
−
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_ssl.log 10M" "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"
 
−
LogLevel warn
 
−
 
−
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
 
−
 
 
−
SSLEngine on
 
−
SSLCertificateFile /etc/ssl/private/dev/${app_name}.crt
 
−
SSLCertificateKeyFile /etc/ssl/private/dev/${app_name}.key
 
−
<FilesMatch "\.(cgi|shtml|phtml|php)$">
 
−
SSLOptions +StdEnvVars
 
−
</FilesMatch>
 
−
<Directory "/local/www/v2.4.34/cgi-bin">
 
−
SSLOptions +StdEnvVars
 
−
</Directory>
 
−
BrowserMatch "MSIE [2-5]" \
 
−
nokeepalive ssl-unclean-shutdown \
 
−
downgrade-1.0 force-response-1.0
 
−
 
 
−
<Directory "/data/www/DEV/myapp.jordan-lenuff.com">
 
−
DirectoryIndex index.php
 
−
Options FollowSymLinks Indexes MultiViews
 
−
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.
 
−
 
 
−
== Activer une page de maintenance ==
 
−
Dans le <code>DOCUMENT_ROOT</code> du site publié par Apache, ajouter dans un fichier <code>.htaccess</code> les lignes suivantes :
 
−
<syntaxhighlight lang="apache">
 
−
RewriteEngine On
 
−
# The following lines enables maintenance mode if
 
−
# a maintenance.enable file is found
 
−
RewriteCond %{REMOTE_ADDR} !^123\.456\.789\.000
 
−
RewriteCond %{DOCUMENT_ROOT}/maintenance.php -f
 
−
RewriteCond %{DOCUMENT_ROOT}/maintenance.enable -f
 
−
RewriteCond %{SCRIPT_FILENAME} !maintenance.php
 
−
RewriteRule ^.*$ /maintenance.php [R=503,L]
 
−
ErrorDocument 503 /maintenance.php
 
−
Header Set Cache-Control "max-age=0, no-store"
 
−
</syntaxhighlight>
 
−
 
 
−
Il faudra adapter (ou supprimer) la condition <code>%{REMOTE_ADDR}</code> selon l'adresse IP du poste qui devra continuer à accéder au site pour tester.
 
−
 
 
−
Pour activer le mode maintenance, il faudra qu'il existe au préalable une page <code>maintenance.php</code>, à laquelle viendra se joindre un fichier <code>maintenance.enable</code>.
 
−
 
 
−
Pour désactiver le mode maintenance, il suffira de supprimer le fichier <code>maintenance.enable</code>, ou de le renommer en <code>maintenance.disable</code>.
 
−
 
 
−
==Erreurs connues==
 
−
=== AH00106: piped log program 'xxxxxxx' failed unexpectedly ===
 
−
Cette erreur est souvent accompagnée de ce genre d'erreur également : <code>error while loading shared libraries: libdb-5.3.so: cannot open shared object file: No such file or directory</code>.
 
−
 
 
−
On retrouve ces erreurs au (re)démarrage d'Apache dans le fichier de logs principal d'erreur :
 
−
{{terminal|text=
 
−
[root@myserver:/root] > tail /data/logs/http_default_error.log
 
−
AH00106: piped log program '/local/www/current/bin/rotatelogs -l -f -n 15 /data/logs/pcb.gazdebordeaux.fr/pcb.gazdebordeaux.fr_http_access.log 10M' failed unexpectedly
 
−
/local/www/current/bin/rotatelogs: error while loading shared libraries: libdb-5.3.so: cannot open shared object file: No such file or directory
 
−
AH00106: piped log program '/local/www/current/bin/rotatelogs -l -f -n 15 /data/logs/pcb.gazdebordeaux.fr/pcb.gazdebordeaux.fr_http_access.log 10M' failed unexpectedly
 
−
/local/www/current/bin/rotatelogs: error while loading shared libraries: libdb-5.3.so: cannot open shared object file: No such file or directory
 
−
AH00106: piped log program '/local/www/current/bin/rotatelogs -l -f -n 15 /data/logs/pcb.gazdebordeaux.fr/pcb.gazdebordeaux.fr_http_access.log 10M' failed unexpectedly
 
−
/local/www/current/bin/rotatelogs: error while loading shared libraries: libdb-5.3.so: cannot open shared object file: No such file or directory
 
−
AH00106: piped log program '/local/www/current/bin/rotatelogs -l -f -n 15 /data/logs/pcb.gazdebordeaux.fr/pcb.gazdebordeaux.fr_http_access.log 10M' failed unexpectedly
 
−
/local/www/current/bin/rotatelogs: error while loading shared libraries: libdb-5.3.so: cannot open shared object file: No such file or directory
 
−
AH00106: piped log program '/local/www/current/bin/rotatelogs -l -f -n 15 /data/logs/pcb.gazdebordeaux.fr/pcb.gazdebordeaux.fr_http_access.log 10M' failed unexpectedly
 
−
/local/www/current/bin/rotatelogs: error while loading shared libraries: libdb-5.3.so: cannot open shared object file: No such file or directory
 
−
}}
 
−
 
 
−
La résolution est simple. Il manque une librairie qu'il faut simplement installer : <code>libdb-5.3.so</code>.
 
−
 
 
−
Récupérer le paquet [[:Fichier:Libdb-5_3-5.3.28-2.1.x86_64.rpm|Libdb-5_3-5.3.28-2.1.x86_64.rpm]] et l'installer avec la commande :
 
−
rpm -ivh libdb-5_3-5.3.28-2.1.x86_64.rpm
 
−
 
 
−
Le résultat de la commande est le suivant :
 
−
{{terminal|text=
 
−
[root@myserver:/root] > rpm -ivh libdb-5_3-5.3.28-2.1.x86_64.rpm
 
−
attention : libdb-5_3-5.3.28-2.1.x86_64.rpm: Entête V3 DSA/SHA1 Signature, clé ID 3916c061: NOKEY
 
−
Préparation...                      ################################# [100%]
 
−
Mise à jour / installation...
 
−
  1:libdb-5_3-5.3.28-2.1            ################################# [100%]
 
−
}}
 
−
 
 
−
===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
 
−
 
 
−
==Analyse==
 
−
Pour afficher la consommation de mémoire des différents processus Apache, lancer la commande :
 
−
ps -ylC httpd --sort:rss
 
−
 
 
−
Dans la colonne ''RSS'' (Resident Set Size) s'affiche la mémoire vive (RAM) consommée en kilo-octets.
 
−
 
 
−
<u>Exemple :</u>
 
−
<pre>
 
−
[root@myserver:/root] > ps -ylC httpd --sort:rss
 
−
S  UID  PID  PPID  C PRI  NI  RSS    SZ WCHAN  TTY          TIME CMD
 
−
S    0 24504    1  0  80  0 22200 64042 -      ?        00:00:01 httpd
 
−
S  1001 15029 24504 17  80  0 619944 566892 pipe_w ?      00:00:20 httpd
 
−
S  1001 15062 24504 31  80  0 707636 583390 pipe_w ?      00:00:37 httpd
 
−
S  1001 15034 24504 25  80  0 713068 583304 pipe_w ?      00:00:30 httpd
 
−
S  1001 15113 24504 34  80  0 719964 583380 pipe_w ?      00:00:39 httpd
 
−
</pre>
 

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