Je reçois cette erreur en essayant d'accéder à localhost via un navigateur.
AH01630: client denied by server configuration
J'ai vérifié les autorisations de mon dossier de site à l'aide de:
Sudo chmod 777 -R *
Voici mon fichier de configuration:
<VirtualHost *:80>
ServerAdmin webmaster@localhost
DocumentRoot /home/user-name/www/myproject
<Directory />
Options FollowSymLinks
AllowOverride all
Allow from all
</Directory>
<Location />
Allow from all
Order Deny,Allow
</Location>
<Directory /home/user-name/www/myproject/>
Options Indexes FollowSymLinks MultiViews
AllowOverride all
Order allow,deny
Allow from all
</Directory>
ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
<Directory "/usr/lib/cgi-bin">
AllowOverride all
Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
Order allow,deny
Allow from all
</Directory>
ErrorLog ${Apache_LOG_DIR}/error.log
# Possible values include: debug, info, notice, warn, error, crit,
# alert, emerg.
LogLevel warn
CustomLog ${Apache_LOG_DIR}/access.log combined
Alias /doc/ "/usr/share/doc/"
<Directory "/usr/share/doc/">
Options Indexes MultiViews FollowSymLinks
AllowOverride all
Order deny,allow
Deny from all
Allow from 127.0.0.0/255.0.0.0 ::1/128
</Directory>
Si vous utilisez Apache 2.4
Vous devez vérifier autoriser et refuser les règles
Départ http://httpd.Apache.org/docs/2.4/upgrading.html#access
En 2.2, le contrôle d'accès basé sur le nom d'hôte du client, l'adresse IP et d'autres caractéristiques des demandes du client a été effectué à l'aide des directives Order, Allow, Deny et Satisfy.
En 2.4, ce contrôle d'accès est effectué de la même manière que les autres contrôles d'autorisation, à l'aide du nouveau module mod_authz_Host.
La nouvelle directive est Require :
2.2 configuration:
Order allow,deny
Allow from all
2.4 configuration:
Require all granted
N'oubliez pas non plus de redémarrer le serveur Apache après ces modifications (# service httpd restart
)
Pour tous les répertoires, écrivez Require all granted
au lieu de Allow from all
Mise à jour
Si ce qui précède ne fonctionne pas, supprimez également la ligne mentionnée ci-dessous:
Ordre permettre, refuser
Vérifiez à nouveau que le chemin d'accès à DocumentRoot est correct. Cela peut causer cette erreur.
J'ai apporté les mêmes modifications que ravisorg a suggéré à OSX 10.10 Yosemite de mettre à niveau Apache vers la version 2.4. Vous trouverez ci-dessous les modifications apportées à http.conf.
<Directory />
AllowOverride none
Require all denied
</Directory>
<Directory /Volumes/Data/Data/USER/Sites/>
AllowOverride none
Require all granted
</Directory>
Cela me rendit absolument fou pendant un jour et demi, mais je trouvai une solution si toutes les autres solutions avaient été essayées sans succès.
Ceci est pour macOS.
À ce stade, j'ai immédiatement cessé de recevoir 403 erreurs et tout a commencé à fonctionner comme prévu. Ce qui est bizarre, c’est que je n’avais même pas besoin de redémarrer Apache cela fonctionnait, j’imagine qu’il a redémarré lorsque j’ai été chez mon hôte local, honnêtement, je ne sais pas, mais je suppose que le problème est qu’Apache ne redémarre pas réellement avec Apachectl restart, ou arrêter ou commencer. J'espère que ça aide quelqu'un.
Je me suis résolu après avoir passé quelques heures.
J'ai installé Apache/2.4.7 (Ubuntu) via coookbook dans vagrant vm.
Le fichier /etc/Apache2/Apache2.conf n'a pas d'élément <VirtualHost *:80>
par défaut.
J'ai fait deux changements pour y arriver
<VirtualHost *:80>
puis finalement je viens de démarrer vm ..
Si vous réduisez le journal des erreurs et rechargez la page, vous devriez voir plus d’informations sur le problème exact.
Saisissez les variables d'environnement pour que $ {Apache_LOG_DIR} fonctionne réellement ...
source /etc/Apache2/envvars
Alors queue et regarde ...
tail -f ${Apache_LOG_DIR}/error.log
Est-ce que quelqu'un a pensé à ce serveur wamp par défaut d'inclure le fichier httpd-vhosts.conf
? Mon approche est de supprimer la note ci-dessous
conf
# Virtual hosts
Include conf/extra/httpd-vhosts.conf
dans le fichier httpd.conf
. C'est tout.
dans mon cas,
j'utilise macOS Mojave (Apache/2.4.34). Un problème est survenu dans les paramètres de l'hôte virtuel dans le fichier /etc/Apache2/extra/httpd-vhosts.conf. après avoir ajouté la balise de répertoire requise, mon problème avait disparu.
Exiger tout accordé
J'espère que la structure de configuration complète de l'hôte virtuel vous sauvera.
<VirtualHost *:80>
DocumentRoot "/Users/vagabond/Sites/MainProjectFolderName/public/"
ServerName project.loc
<Directory /Users/vagabond/Sites/MainProjectFolderName/public/>
Require all granted
</Directory>
ErrorLog "/Users/vagabond/Sites/logs/MainProjectFolderName.loc-error_log"
CustomLog "/Users/vagabond/Sites/logs/MainProjectFolderName.loc-access_log" common
</VirtualHost>
tout ce que vous avez à faire est de remplacer le MainProjectFolderName par votre exact ProjectFolderName.
Si vous utilisez Apache 2.4 dans WampServer sous Windows OS.
Vous devez ouvrir le fichier https-vhosts.conf dans le bloc-notes.
C:\wamp64\bin\Apache\apache2.4.37\conf\extra\https-vhosts.conf
Si vous ne parvenez pas à trouver le fichier ci-dessus. vérifier la capture d'écran ci-dessous
<VirtualHost *:80>
ServerName localhost
DocumentRoot c:/wamp64/www
<Directory "c:/wamp64/www/">
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Require local
</Directory>
</VirtualHost>
Dans le code ci-dessus, remplacez
Require local
avec
Require all granted
Et enregistrez-le. Redémarrez le service Apache et réessayez.
Cela me rendait fou. Finalement, j'ai compris quel était le problème: j’utilisais des chemins directs pour le journal des erreurs et ils avaient tort.
Pourquoi Apache envoie-t-il un message d'erreur vague (et erroné)? À la place, utilisez un message d'erreur correct et utile, tel que: Le chemin d'accès à la directive ErrorLog "/wrong/path/and/filename.log" n'est pas valide.
Quoi qu'il en soit, pour résoudre ce problème, assurez-vous que vos directives de journal des erreurs ressemblent à ceci:
ErrorLog ${Apache_LOG_DIR}/error.log
CustomLog ${Apache_LOG_DIR}/access.log combined
Si vous avez un hôte https, n'oubliez pas de modifier également Require all granted
pour la configuration ssl.
De plus, il est parfois utile de vérifier les autorisations en tant qu'utilisateur Apache:
# ps -eFH | grep http # get the username used by httpd
...
Apache 18837 2692 0 119996 9328 9 10:33 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND
# su -s/bin/bash Apache # switch to that user
bash-4.2$ whoami
Apache
bash-4.2$ cd /home
bash-4.2$ ls
bash-4.2$ cd mysite.com
bash-4.2$ ls
bash-4.2$ cat file-which-does-not-work.txt
Si aucune des autres réponses sur cette page ne vous convient, voici ce que j'ai rencontré après des heures passées à patauger.
J'ai utilisé des configurations spécifiques à l'utilisateur, avec Sites
spécifié comme étant mon UserDir
dans /private/etc/Apache2/extra/httpd-userdir.conf
. Cependant, l'accès au système d'extrémité http://localhost/~jwork/
m'a été interdit.
Je pouvais voir dans /var/log/Apache2/error_log
que l'accès à /Users/jwork/Sites/
était bloqué. Cependant, j'ai été autorisé à accéder à DocumentRoot, via http://localhost/
. Cela suggérait que je n'avais pas le droit de voir l'utilisateur ~jwork
. Mais pour autant que je puisse en juger par ps aux | egrep '(Apache|httpd)'
et lsof -i :80
, Apache s'exécutait pour l'utilisateur jwork
, donc quelque chose n'était clairement pas en écriture avec ma configuration utilisateur.
Avec un utilisateur nommé jwork
, voici mon fichier de configuration:
/private/etc/Apache2/users/jwork.conf
<Directory "/Users/jwork/Sites/">
Require all granted
</Directory>
Cette config est parfaitement valide. Cependant, j'ai constaté que ma configuration utilisateur n'était pas incluse:
/private/etc/Apache2/extra/httpd-userdir.conf
## Note how it's commented out by default.
## Just remove the comment to enable your user conf.
#Include /private/etc/Apache2/users/*.conf
Notez qu'il s'agit du chemin d'accès par défaut au fichier de configuration userdir, mais comme vous le verrez ci-dessous, il est configurable dans httpd.conf
. Assurez-vous que les lignes suivantes sont activées:
/private/etc/Apache2/httpd.conf
Include /private/etc/Apache2/extra/httpd-userdir.conf
# ...
LoadModule userdir_module libexec/Apache2/mod_userdir.so
Pour Wamp 3 (Apache 2.4), en plus de mettre le serveur en ligne comme décrit dans les autres réponses, dans le fichier Virtual Hosts conf/extra/httpd-vhosts.conf
vous devrez peut-être remplacer
Require local
avec
Require all granted
Ceci est applicable si dans httpd.conf
vous avez
Include conf/extra/httpd-vhosts.conf
Pour ceux qui sont bloqués par cette erreur comme moi et que rien n’a aidé d’en haut: vérifiez si le dossier problématique de error.log existe réellement sur votre serveur. Le mien a été généré automatiquement par Django au mauvais endroit (il a été manipulé avec une racine statique, puis manage.py collectstatic
). Je ne sais pas pourquoi on ne peut pas nommer les erreurs correctement.
J'ai en fait résolu celui-ci en ajoutant le répertoire d'accès à l'entrée: 80.
<Directory "c:/whatever-directory-you-use/">
AllowOverride All
Require all granted
</Directory>
Avant que tout le monde ne reçoive toute la "sécurité" sur moi, dans certaines circonstances, il ne s'agit pas d'un problème de sécurité.
Si vous utilisez une ressource distante, je vous conseillerais plutôt de vous assurer que votre demande CURL passe par HTTPS/TLS, puis cette entrée de répertoire se trouve sur le port 443.
Lorsque vous utilisez Ubuntu, vérifiez si le module CGI est activé. Si non:
Sudo a2enmod cgi
Outre les directives manquantes Order
et Allow
mentionnées dans d'autres réponses, sachez qu'une expression régulière non concordante d'une directive DirectoryMatch
peut également être à l'origine de cette erreur.
Si le chemin demandé est /home/user-foo1bar/www/myproject/
, le matcher suivant ne correspondra pas
<DirectoryMatch "/home/user-[a-z]+/www/myproject/">
...
</DirectoryMatch>
ainsi, même une configuration d'accès valide peut provoquer cette erreur.
Une cause obscure (qui vient juste d’être traitée), et pourtant possible, est une règle interne de mod_rewrite, dans le fichier de configuration principal (pas .htaccess) qui écrit dans un chemin qui existe à la racine du système de fichiers du serveur. Supposons que vous ayez un répertoire /media
sur votre site et que vous réécriviez quelque chose comme ceci:
RewriteRule /some_image.png /media/some_other_location.png
Si vous avez un répertoire /media
à la racine de votre serveur, la réécriture sera tentée de la sorte (ce qui entraînera une erreur d'accès refusé) plutôt que celle du répertoire de votre site, car la racine du système de fichiers est d'abord vérifiée par mod_rewrite, pour l'existence du premier répertoire du chemin, avant le répertoire de votre site.
J'en ai un autre qui peut être utile à quelqu'un. A reçu le même message d'erreur après la mise à niveau de PHP 5.6 => 7.0. Nous avions modifié les paramètres de téléchargement PHP et nous avions oublié de les modifier une fois copiés. Même si je ne téléchargeais pas d’images à l’époque, Silverstripe (notre CMS) refusait de sauvegarder et jetait cette erreur. Augmentation de la taille de téléchargement de l'image et cela a fonctionné immédiatement.
Le problème peut être que la directive ne se trouve pas sous <Directory>
https://httpd.Apache.org/docs/2.4/mod/mod_authz_Host.html#requiredirectives
La directive peut être référencée dans une section <Directory>, <Files> ou <Location> ainsi que dans des fichiers .htaccess pour contrôler l'accès à des parties particulières du serveur. L'accès peut être contrôlé en fonction du nom d'hôte ou de l'adresse IP du client.
Au cas où cela aiderait quelqu'un à googler comme moi, ce message d'erreur tentait d'accéder à un fichier SVG sur mon serveur, par exemple. https://example.com/images/file.svg . Les autres types de fichiers semblaient bien, juste SVG échouaient.
J'ai cherché tous les fichiers /etc/httpd
conf et vérifié tous les types de configuration require all denied
, mais je ne trouvais pas quelle configuration avait cet effet.
J'ai tourné LogLevel pour déboguer dans la configuration VirtualHost et j'ai pu voir la journalisation mod_authz_core spécifiant qu'il y avait un "Exiger tout refusé":
[Mon Jun 10 13:09:54.321022 2019] [authz_core:debug] [pid 23459:tid 140576341206784] mod_authz_core.c(817): [client 127.0.0.1:54626] AH01626: authorization result of Require all denied: denied
[Mon Jun 10 13:09:54.321038 2019] [authz_core:debug] [pid 23459:tid 140576341206784] mod_authz_core.c(817): [client 127.0.0.1:54626] AH01626: authorization result of <RequireAny>: denied
[Mon Jun 10 13:09:54.321082 2019] [authz_core:error] [pid 23459:tid 140576341206784] [client 127.0.0.1:54626] AH01630: client denied by server configuration: /home/blah/htdocs/images/file.svg
Grâce à des tests à l'aveugle, j'ai déplacé le fichier à la racine de la racine Web et découvert que je pouvais y accéder à partir de https://example.com/file.svg .., de sorte qu'il n'a échoué que dans ' dossier des images. Cela m'a conduit à un fichier .htaccess dans le dossier des images dont je n'avais aucune idée.
Il s'avère que Zen Cart 1.5 est livré avec un fichier images/.htaccess qui contient:
# deny *everything*
<FilesMatch ".*">
<IfModule mod_authz_core.c>
Require all denied
</IfModule>
<IfModule !mod_authz_core.c>
Order Allow,Deny
Deny from all
</IfModule>
</FilesMatch>
# but now allow just *certain* necessary files:
<FilesMatch "(?i).*\.(jpe?g|gif|webp|png|swf)$" >
<IfModule mod_authz_core.c>
Require all granted
</IfModule>
<IfModule !mod_authz_core.c>
Order Allow,Deny
Allow from all
</IfModule>
</FilesMatch>
Cela était très agaçant et j'espère que cela pourrait rappeler aux autres de vérifier les fichiers .htaccess à tous les niveaux du système de fichiers, ce qui entraîne des problèmes. accéder au cas où il y aurait ce genre de sottise.