Apache: client refusé par la configuration du serveur


150

Je reçois

[Tue Apr 24 12:12:55 2012] [error] [client 127.0.0.1] client refusé par la configuration du serveur: / labs / Projects / Nebula / bin /

Ma structure de répertoires ressemble à (j'utilise Symfony 2, devrait être une structure similaire pour d'autres frameworks Web)

entrez la description de l'image ici

J'ai des vhosts comme:

<VirtualHost nebula:80>
    DocumentRoot "/labs/Projects/Nebula/web/"
    ServerName nebula
    ErrorLog "/var/log/httpd/nebula-errors.log"
</VirtualHost>

<Directory "/labs/Projects/Nebula/">
    Options All
    AllowOverride All
    Order allow,deny
    Allow from 127.0.0 192.168.1 ::1 localhost
</Directory>

Je me demande quel est le problème et comment le résoudre?


1
@JiewMeng: Vous devriez probablement accepter la réponse de Phil. Cela semble être le problème avec la plupart des installations Apache aujourd'hui (Apache 2.4). Merci.
dotancohen

Réponses:


396

Apache 2.4.3 (ou peut-être un peu plus tôt) a ajouté une nouvelle fonctionnalité de sécurité qui entraîne souvent cette erreur. Vous verrez également un message de journal de la forme "client refusé par la configuration du serveur". La fonctionnalité nécessite une identité d'utilisateur autorisé pour accéder à un annuaire. Il est activé par DEFAULT dans le httpd.conf fourni avec Apache. Vous pouvez voir l'activation de la fonctionnalité avec la directive

Require all denied

Cela dit essentiellement de refuser l'accès à tous les utilisateurs. Pour résoudre ce problème, supprimez la directive refusée (ou bien mieux) ajoutez la directive suivante aux répertoires auxquels vous souhaitez accorder l'accès:

Require all granted

un péché

<Directory "your directory here">
   Order allow,deny
   Allow from all
   # New directive needed in Apache 2.4.3: 
   Require all granted
</Directory>

9
peut également avoir besoin d'ajouter Satisfy Anyaprès leRequire all granted
MarkHu

@MarkHu - pouvez-vous expliquer la nécessité éventuelle de Satisfy anydans ce contexte? Je demande parce que je tirais mes cheveux ici, et en ajoutant cela, tout fonctionnait pour moi. La chose étrange est que l'application fonctionnait avec l'entrée vhost existante jusqu'à une récente mise à niveau d'Apache vers 2.4.9. Encore plus étrange, c'est que cela fonctionne bien sur un autre serveur avec les mêmes versions app / vhost et Apache / PHP. Différents serveurs cependant - AWS Linux et Ubuntu 14.10 respectivement. Étrange ... je suppose que je dois comparer les httpd.conffichiers de chaque serveur pour voir s'il y a une différence de configuration là-bas ...
Darragh Enright

Vérifiez également votre htaccesssur le chemin
auquel

Mon environnement ne fonctionnait pas jusqu'à ce que je décide d'opter pour la solution @MarkHu Satisfy Any. Merci!!!
Neonigma

même après avoir changé pour exiger tout accordé, il affiche la même erreur Accès refusé.
Deepak

10

OK, j'utilise la mauvaise syntaxe, je devrais utiliser

Allow from 127.0.0.1
Allow from ::1
...

1
Pour Apache> 2.4, cela seul ne pouvait pas fonctionner pour moi. Mais cela a fonctionné lorsqu'il est combiné avec Require all granted, comme suggéré par @ Phil-L
Mugoma J.Okomba

5

Dans Apache 2.4, l'ancienne syntaxe d'autorisation d'accès a été obsolète et remplacée par un nouveau système utilisant Require .

Ce que vous voulez alors, c'est quelque chose comme ce qui suit:

<Directory "/labs/Projects/Nebula/">
  Options All
  AllowOverride All
  <RequireAny>
    Require local
    Require ip 192.168.1
  </RequireAny>
</Directory>

Cela autorisera les connexions provenant soit de l'hôte local, soit d'adresses IP commençant par «192.168.1».

Il existe également un nouveau module disponible qui permet à Apache 2.4 de reconnaître l'ancienne syntaxe si vous ne souhaitez pas mettre à jour votre configuration tout de suite:

sudo a2enmod access_compat

1

Pouvez-vous essayer de changer "Autoriser de 127.0.0 192.168.1 :: 1 localhost" à "Autoriser de tous". Si cela résout votre problème, vous devez être moins restrictif quant à l'endroit où le contenu peut être demandé


1

Voici mon fichier hôte virtuel symfony 1.4 sur Debian, qui fonctionne très bien.

  <Directory /var/www/sf_project/web/>
    Options All Indexes FollowSymLinks    
    AllowOverride All
    Order allow,deny
    Allow from all
  </Directory>

Si vous ne souhaitez pas restreindre l'accès à une plage d'adresses IP spécifique, par exemple localhost, utilisez ceci:

Allow from 127.0.0.0/8

Le mod_authz_host est responsable du filtrage des plages d'adresses IP. Vous pouvez y rechercher des informations détaillées.

Mais peut-être que le problème pourrait être lié à une sorte de mauvaise configuration dans votre "apache2.conf".

Sur quel système d'exploitation l'Apache fonctionne-t-il?


1

si vous avez le

Allow from All

dans httpd.conf puis assurez-vous que nous avons

index.php

comme dans la ligne ci-dessous dans httpd.conf

DirectoryIndex index.html index.php

1

J'ai eu ce problème avec Vesta CP et pour moi, l'astuce était de supprimer .htaccess et d'essayer à nouveau d'accéder à n'importe quel fichier.

Cela a abouti à la régénération du fichier .htaccess et j'ai pu accéder à mes fichiers.


0

Dans mon cas, la clé était:

AllowOverride All

dans la définition de vhost. J'espère que cela aide quelqu'un.


-3

Ce code a fonctionné pour moi.

 <Location />
Allow from all
Order Deny,Allow
</Location> 

J'espère que cela aide les autres


1
Cela ne doit absolument pas être encouragé à être ajouté à une configuration Apache.
Ricky Mutschlechner

Cela permet à Apache d'accéder à tous les fichiers de l'ordinateur. Très mauvais pour la sécurité.
CoderGuy123
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.