Apache VirtualHost 403 interdit

123

J'ai récemment essayé de configurer un serveur de test avec Apache. Le site doit fonctionner sous le domaine www.mytest.com. J'obtiens toujours une 403 Forbiddenerreur. Je suis sur l'édition serveur Ubuntu 10.10. La racine de la documentation est sous dir /var/www. Voici mes paramètres:

Contenu de / var / www

ls -l /var/www/

total 12
drwxr-xr-x 2 root root 4096 2011-08-04 11:26 mytest.com
-rwxr-xr-x 1 root root 177 2011-07-25 16:10 index.html

Contenu du fichier hôte sur le serveur (avec IP 192.168.2.5)

cat /etc/hosts

127.0.0.1 localhost 
127.0.1.1 americano
192.168.2.5 americano.mytest.com www.mytest.com

# The following lines are desirable for IPv6 capable hosts
::1 localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters

Configuration du site

<VirtualHost *>
ServerAdmin [email protected]
ServerName www.mytest.com
ServerAlias mytest.com

DocumentRoot "/var/www/mytest.com"

ErrorLog /var/log/apache2/mytest-error_log
CustomLog /var/log/apache2/mytest-access_log combined

#
# This should be changed to whatever you set DocumentRoot to.
#
<Directory "/var/www/mytest.com">
Options -Indexes FollowSymLinks
AllowOverride None

Order allow,deny
Allow from all
</Directory>
</VirtualHost>

Je n'ai pas de .htaccessfichier dans ma racine doc. Les permissions sont correctement définies (lisibles par www-data).

Si je tape l'adresse IP depuis mon bureau, le site s'affiche correctement. J'ai changé le fichier hosts sur mon bureau pour qu'il pointe www.mytest.comvers l'adresse IP du serveur. Quand je l'utilise, je reçois 403. Étant donné que de nombreuses fonctions de ce site sont sensibles au nom du site, je dois pouvoir accéder au site par le nom de domaine.

Une autre chose amusante est que même si tous les fichiers journaux sont créés correctement, ils ne contiennent aucune information concernant cette erreur.

Je suis coincé. Quelqu'un peut-il aider?

Yuchen Wang
la source
pouvez-vous ajouter le contenu de: sudo sh -c ". /etc/apache2/envvars; apache2 -S"(liste des hôtes virtuels) et:sudo sh -c ". /etc/apache2/envvars; grep -R Listen /etc/apache2/*|grep -v \"#\"; grep -R NameVirtual /etc/apache2/*|grep -v \"#\""
regilero
La première commande retourne la suivante: VirtualHost configuration: 192.168.2.5:* www.mytest.com (/etc/apache2/sites-enabled/mytest.com:1) Syntax OK La seconde renvoie: /etc/apache2/ports.conf:Listen 80 /etc/apache2/ports.conf: Listen 443 /etc/apache2/ports.conf: Listen 443 /etc/apache2/conf.d/virtual.conf:NameVirtualHost *
Yuchen Wang
1
essayez sur serverfault.com
regilero

Réponses:

296

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 verriez également un message de journal de la forme "client refusé par la configuration du serveur". La fonctionnalité nécessite une identité d'utilisateur 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 signifie 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>
Phil L
la source
3
Je voudrais noter que si vous rencontrez ce problème en utilisant des hôtes virtuels, vous devrez ajouter le "Exiger tout accordé" aux paramètres de chaque hôte virtuel dans le fichier apache / conf / extra / httpd-vhosts.conf.
Soundfx4
1
J'ai ajouté cette directive /etc/apache2/apache2.confet cela a aidé, merci!
DmitMedv
@ Soundfx4, il n'y a pas de dossier appelé à l' apache/conf/extraintérieur/etc/apache2
Noir
J'avais ajouté /var/dev/website.com et recevais une erreur 403. L'ajout de la directive suggérée à /etc/apache2/apache2.conf (ubuntu) a fait l'affaire. Merci les gars!
LoveFineArt
Merci Monsieur. Apache est de plus en plus difficile à travailler ces jours-ci ...
OoDeLally
15

Pour apache Ubuntu 2.4.7, j'ai finalement trouvé que vous deviez mettre en liste blanche votre hôte virtuel dans apache2.conf

# access here, or in any related virtual host.
<Directory /home/gav/public_html/>
    Options FollowSymLinks
    AllowOverride None
    Require all granted
</Directory>
GAV
la source
8

Cela peut être un problème d'autorisations.

chaque chemin parent vers la racine du document virtuel doit être lisible, inscriptible et exécutable par l'utilisateur httpd du serveur Web

selon cette page sur les erreurs Apache 403.

Puisque vous utilisez Allow from all, votre commande ne devrait pas avoir d'importance, mais vous pouvez essayer de la changer Deny,Allowpour définir le comportement par défaut sur "autoriser".

Pops
la source
4
Inscriptible? vraiment? Je ne suis pas sûr
php-dev
5

Déplacez la clause Directory hors de l'hôte virtuel et placez-la avant de déclarer l'hôte virtuel.

Cela m'a rendu fou pendant longtemps aussi. Je ne sais pas pourquoi. C'est un truc Debian.

Samtresler
la source
Woah, c'est tellement bizarre.
kako-nawao
0

Si vous avez tout fait correctement, donnez simplement l'autorisation au répertoire personnel comme:

sudo chmod o+x $HOME

puis

sudo systemctl restart apache2
cagcak
la source
0

Le problème était que l'autorisation d'accès au fichier était incorrecte.

J'ai changé les permissions du répertoire et cela a fonctionné.

Sebastian Viereck
la source
0

J'ai aussi eu ce problème sur Arch Linux ... cela me coûte du temps mais je suis heureux maintenant d'avoir trouvé mon erreur:

Mon répertoire avec les .htmlfichiers où dans mon compte.
J'ai tout activé r+xmais j'ai toujours l' 403erreur.
Ensuite, je suis retourné complètement en arrière et j'ai essayé de configurer mon répertoire personnel pour qu'il s'exécute, ce qui a résolu mon problème.

TornaxO7
la source
-1

Je viens de passer plusieurs heures sur ce stupide problème

Tout d'abord, modifiez les autorisations en utilisant ceci dans le terminal

find htdocs -type f -exec chmod 664 {} + -o -type d -exec chmod 775 {} +

Je ne sais pas quelle est la différence entre 664 et 775 J'ai fait les deux 775 comme ça Aussi htdocs a besoin du chemin du répertoire par exemple pour moi c'était

/usr/local/apache2/htdocs 

find htdocs -type f -exec chmod 775 {} + -o -type d -exec chmod 775 {} +

C'est aussi l'autre chose stupide

assurez-vous que votre lien image src est votre nom de domaine par exemple

src="http://www.fakedomain.com/images/photo.png"

Assurez-vous d'avoir

EnableSendfile off in httpd.conf file
EnableMMAP off in httpd.conf file

Vous modifiez ceux en utilisant pico dans le terminal

J'ai également créé un répertoire pour les images spécifiquement afin que lorsque vous tapez dans la barre d'adresse du navigateur domainname.com/images, vous obtiendrez une liste de photos qui peuvent être téléchargées et doivent être téléchargées avec succès pour indiquer les fichiers image qui fonctionnent correctement

<Directory /usr/local/apache2/htdocs/images>
AddType images/png .png
</Directory>

Et ce sont les solutions que j'ai essayées, maintenant j'ai des images fonctionnelles ... yay !!!

Sur le (s) problème (s) suivant (s)

Jacob David C. Cunningham
la source