3 votes

La directive de refus d'apache ne fonctionne pas

La solution : Je dois placer les directives "allow/deny" à l'intérieur de la première directive "Directory" (qui se trouve être celle de la racine). Je suppose que c'est parce qu'il a un AllowOverride None qui ne permet pas aux enfants de spécifier allow/deny ?

<Directory />
    Options FollowSymLinks
    AllowOverride None
    Order allow,deny
    Allow from all
        Deny from xxx.xx.xxx.xx
</Directory>

Original :

Cette configuration permet toujours l'accès à toutes les IP après le redémarrage d'Apache.

<VirtualHost *:80>

    ServerName  www.xxx.com

    DocumentRoot  /var/www/vhosts/xxx

    <Directory /var/www/vhosts/xxx>
        Options Indexes FollowSymLinks
        AllowOverride none
        Order deny,allow
        Deny from all                     
        Allow from 127.0.0.1
    </Directory>
</VirtualHost>

0 votes

Donc vous aviez bien deux directives <Directory> comme je le supposais ? Placer cette directive sur la racine est une étape inhabituelle.

0 votes

Comme Patrick R a commenté la question, mettre une directive Directory avec le même chemin que documentroot cause des problèmes. J'ai un problème similaire dans ma configuration apache. J'ai résolu le problème en désactivant le répertoire problématique et en écrivant les options directement dans la directive virtualhost.

2voto

Doug Wilson Points 1435

Ça devrait marcher. J'ai vérifié votre code sur mon serveur pour m'assurer que je n'étais pas fou. Es-tu sûr que tu n'as pas une définition avant celle-ci qui est prioritaire ?

Créez un fichier de test dans le dossier sur votre serveur. Quelque chose comme test.txt. Vous constaterez peut-être qu'il ne s'affiche pas lorsque vous chargez cette url dans votre navigateur. Si c'est le cas, votre définition ci-dessus est ignorée.

1 votes

Il y a un AllowOverride none donc, un .htaccess ne devrait pas pouvoir faire quoi que ce soit.

0 votes

Encore une fois, Mat. Je vais retirer cela de ce que j'ai dit.

0 votes

Je soupçonne que vos conditions <Directory> seront toujours ignorées, même si vous avez utilisé la bonne réponse de Mat.

1voto

Daren Thomas Points 26812

Pour ce que vous voulez faire, c'est-à-dire n'autoriser que 127.0.0.1, vous devez procéder comme suit :

Order Allow,Deny
Allow from 127.0.0.1

Qui dit le premier, allow les choses, alors deny les choses, et deny des choses qui ne correspondaient pas.

Vous ne devez pas non plus mettre votre <Directory> à l'intérieur de votre <VirtualHost> un, mais avant lui.

0 votes

La définition de Mat devrait fonctionner. Je suis toujours curieux de savoir pourquoi la vôtre ne fonctionne pas.

0 votes

@Mat - Je crois que je vous comprends mal. Suggérez-vous que l'on place le bloc <Directory> en dehors du bloc <VirtualHost> ? Je dois mal vous comprendre. Comment le <Directory> sera-t-il appliqué au virtualhost approprié ?

0voto

jeffatrackaid Points 4092

S'agit-il d'un système Plesk ? Il faut parfois regarder comment les différents includes http sont compilés. Il se peut que quelque chose dans un fichier include ultérieur écrase votre première déclaration.

0voto

sivaguru Points 1

Merci. Ce code fonctionne.

NomVirtualHost 127.0.0.1

NomVirtualHost 192.168.44.141

<VirtualHost 127.0.0.1 192.168.44.141>

#ServerName localhost.com
    ServerName www.localhost.com
DocumentRoot  "E:/abcd"
<Directory "E:/abcd/files">
    Options Indexes FollowSymLinks
        AllowOverride none
    Order allow,deny
    Allow from 192.168.44.128
    Deny from all

  </Directory>
 </VirtualHost>

0 votes

Cela fonctionne soit en utilisant "Allow from" ou "Deny from" dans le bloc VirtualHost. Si j'essaie d'utiliser les deux lignes dans le bloc VirtualHost, cela ne fonctionnera pas correctement.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X