web-dev-qa-db-fra.com

Apache donnant 403 erreurs interdites

Ok, donc j’ai déjà installé deux hôtes virtuels et ils travaillent bien. ils hébergent tous les deux des projets Web simples et fonctionnent correctement avec http://project1 et http://project2 dans le navigateur.

Quoi qu'il en soit, je suis venu pour ajouter un autre vhost. J'ai modifié le fichier/etc/hosts avec 127.0.0.1 project3 et mis à jour le fichier httpd-vhosts.conf en copiant et en collant les entrées précédentes pour project2 et en modifiant le chemin du fichier. 

J'ai vérifié toutes les autorisations de fichiers et de dossiers (en fait, j'ai copié et collé à partir de project2) et simplement mis un message "hello world" dans le fichier index.php.

Je reçois un message d'autorisation refusée 403 lors de l'accès à http://project3

Pourquoi est-ce que ceci, je peux juste comprendre quelle étape j'ai manqué comme tout semble être mis en place correctement.

Merci d'avance.

18
user2672288

Regarde ça :

  • Apache peut accéder physiquement au fichier (l'utilisateur qui exécute Apache, probablement www-data ou Apache, peut accéder au fichier dans le système de fichiers)
  • Apache peut lister le contenu du dossier (permission de lecture)
  • Apache a une directive "Allow" pour ce dossier. Il devrait y en avoir un pour/var/www /, vous pouvez vérifier par défaut vhost par exemple.

De plus, vous pouvez consulter le fichier error.log (généralement situé dans /var/log/Apache2/error.log), qui décrit précisément pourquoi vous obtenez l'erreur 403.

Enfin, vous voudrez peut-être redémarrer Apache pour vous assurer que toute la configuration est appliquée . Cela peut généralement être fait avec /etc/init.d/Apache2 restart. Sur certains systèmes, le script s'appellera httpd. Juste comprendre.

20
blue112

La commande restorecon fonctionne comme ci-dessous:

restorecon -v -R /var/www/html/
6
sangeetha

Je viens de résoudre ce problème après avoir lutté pendant quelques jours. Voici ce qui a fonctionné pour moi:

Tout d’abord, vérifiez votre fichier Apache error_log et consultez le dernier message d’erreur.

  • Si cela dit quelque chose comme:

    access to /mySite denied (filesystem path
    '/Users/myusername/Sites/mySite') because search permissions
    are missing on a component of the path
    

    alors il y a un problème avec vos permissions de fichier. Vous pouvez les réparer en lançant ces commandes depuis le terminal:

    $ cd /Users/myusername/Sites/mySite
    $ find . -type f -exec chmod 644 {} \;
    $ find . -type d -exec chmod 755 {} \;
    

    Ensuite, actualisez l’URL de votre site Web (tel que http://localhost/mySite) . Si vous obtenez toujours une erreur 403, et si votre Apache error_log dit toujours la même chose, déplacez-vous progressivement vers le haut de votre autorisations de répertoire que vous allez. Vous pouvez le faire depuis le terminal en:

    $ cd ..
    $ chmod 755 mySite
    

    Si nécessaire, continuez avec:

    $ cd ..
    $ chmod Sites 
    

    et si nécessaire

    $ cd ..
    $ chmod myusername
    

    NE PAS montez plus loin que cela. Vous pourriez royalement endommager votre système… .. Si vous obtenez toujours l'erreur qui dit search permissions are missing on a component of the path, je ne sais pas ce que vous devriez faire. Cependant, j'ai rencontré une erreur différente (celle ci-dessous) que j'ai corrigée comme suit:

  • Si votre error_log dit quelque chose comme:

    client denied by server configuration:
    /Users/myusername/Sites/mySite
    

    alors votre problème n'est pas avec vos permissions de fichiers, mais avec votre configuration Apache.

    Notez que dans votre fichier httpd.conf, vous verrez une configuration par défaut comme celle-ci (Apache 2.4+):

    <Directory />
        AllowOverride none
        Require all denied
    </Directory>
    

    ou comme ceci (Apache 2.2):

    <Directory />
      Order deny,allow
      Deny from all
    </Directory>
    

    NE PAS changer cela! Nous ne remplacerons pas ces autorisations globalement, mais plutôt dans votre fichier httpd-vhosts.conf . Tout d'abord, assurez-vous toutefois que votre ligne vhost Include dans httpd.conf est sans commentaire . Ça devrait ressembler à ça. (Votre chemin exact peut être différent.)

    # Virtual hosts
    Include etc/extra/httpd-vhosts.conf
    

    Ouvrez maintenant le fichier httpd-vhosts.conf que vous venez de Included. Ajoutez une entrée pour votre page Web si vous n'en avez pas déjà une. Ça devrait ressembler a quelque chose comme ca. Les chemins DocumentRoot et Directory doivent être identiques et indiquer l’emplacement de votre fichier index.html ou index.php. Pour moi, cela se trouve dans le sous-répertoire public.

    Pour Apache 2.2:

    <VirtualHost *:80>
    #     ServerAdmin [email protected]
        DocumentRoot "/Users/myusername/Sites/mySite/public"
        ServerName mysite
    #     ErrorLog "logs/dummy-Host2.example.com-error_log"
    #     CustomLog "logs/dummy-Host2.example.com-access_log" common
        <Directory "/Users/myusername/Sites/mySite/public">
            Options Indexes FollowSymLinks Includes ExecCGI
            AllowOverride All
            Order allow,deny
            Allow from all
            Require all granted
        </Directory>
    </VirtualHost>
    

    Les lignes en disant

    AllowOverride All
    Require all granted
    

    sont critiques pour Apache 2.4+. Sans cela, vous ne remplacerez pas les paramètres Apache par défaut spécifiés dans httpd.conf. Notez que si vous utilisez Apache 2.2, ces lignes devraient plutôt indiquer

    Order allow,deny
    Allow from all
    

    Cette modification a été une source de confusion majeure pour les utilisateurs de Google, tels que I, car le copier-coller de ces lignes Apache 2.2 ne fonctionnera pas dans Apache 2.4+, et les lignes Apache 2.2 sont encore couramment utilisées dans les anciens threads d'aide.

    Une fois vos modifications enregistrées, redémarrez Apache . La commande dépend de votre système d’exploitation et de votre installation, cochez donc Google séparément si vous avez besoin d’aide.

J'espère que ça aidera quelqu'un d'autre!


PS: Si vous ne parvenez pas à trouver ces fichiers .conf, essayez d’exécuter la commande find, telle que:

$ find / -name httpd.conf
5
Cameron Hudson

Le serveur peut avoir besoin d'une permission de lecture pour votre répertoire personnel et de .htaccess.

1
mikemay

Vous pouvez essayer de désactiver selinux et essayez à nouveau en utilisant la commande suivante

setenforce 0
0
S V Aditya