Apache
Ligne 196 : | Ligne 196 : | ||
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. | 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, | + | 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 du 28 août 2019 à 10:00
Sommaire
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 : http://httpd.apache.org/docs/2.2/fr/
- Apache 2.4 : http://httpd.apache.org/docs/2.4/fr/
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 avec la commande suivante :
which rotatelogs
Exemple de retour :
/usr/sbin/rotatelogs
Une fois la commande localisée, adapter la déclaration des fichiers de logs dans la configuration Apache.
Exemple de configuration de rotation de logs :
<VirtualHost *:80>
ServerName pprd-appli.mydomain.com
DocumentRoot "/data/www/PREPROD/appli/"
ErrorLog "|/usr/sbin/rotatelogs -n 5 /data/logs/pprd-appli.mydomain.com_http_error.log 50M"
CustomLog "|/usr/sbin/rotatelogs -n 5 /data/logs/pprd-appli.mydomain.com_http_access.log 50M" combined
LogLevel debug
<Directory "/data/www/PREPROD/appli/">
DirectoryIndex index.php
Options FollowSymLinks
AllowOverride All
Require all granted
</Directory>
</VirtualHost>
Les logs sont paramétrés pour ne tourner que sur 5 fichiers d'une taille maximale de 50M.
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 à Define et UnDefine) dont il est possible de s'inspirer pour chaque nouveau vhost :
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 "|/usr/sbin/rotatelogs -n 5 /data/logs/${url_app}_http_error.log 10M"
CustomLog "|/usr/sbin/rotatelogs -n 5 /data/logs/${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/${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 "|/usr/sbin/rotatelogs -n 5 /data/logs/${url_app}_http_error.log 10M"
CustomLog "|/usr/sbin/rotatelogs -n 5 /data/logs/${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/${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 "|/usr/sbin/rotatelogs -n 5 /data/logs/${url_app}_http_error.log 10M"
CustomLog "|/usr/sbin/rotatelogs -n 5 /data/logs/${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/${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/current/public"
ErrorLog "|/usr/sbin/rotatelogs -n 5 /data/logs/${url_app}_http_error.log 10M"
CustomLog "|/usr/sbin/rotatelogs -n 5 /data/logs/${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/${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
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 la documentation à propos de la directive Directory). Voici un exemple :
# 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>
Dans cet exemple, seuls les dossiers commençant par /data/www/REC/appli
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, la gestion du contrôle d'accès se faisait avec les directives Order Allow, Deny
.
Avec Apache 2.4, bien que les directives Order Allow, Deny
soient encore supportées, la gestion du contrôle d'accès se fait désormais avec la directive Require
.
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, les sections sont combinées selon un ordre bien défini.
Plus particulièrement, "Les sections situées à l'intérieur de sections <VirtualHost>
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 Options None
définie dans la configuration principale d'Apache. Pour corriger cette situation, aller dans le fichier /local/www/<version>/conf/httpd.conf
et remplacer la section :
<Directory />
AllowOverride None
Require all denied
Options None
</Directory>
par :
<Directory />
AllowOverride None
Require all denied
</Directory>
Relancer Apache pour prise en compte des modifications :
httpd -k graceful