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