Apache: klient odrzucony przez konfigurację serwera


150

staje się

[Tue Apr 24 12:12:55 2012] [błąd] [klient 127.0.0.1] klient odrzucony przez konfigurację serwera: / labs / Projects / Nebula / bin /

Wygląda jak struktura moich katalogów (używam Symfony 2, powinna mieć podobną strukturę dla innych frameworków internetowych)

wprowadź opis obrazu tutaj

Mam konfigurację vhostów, taką jak:

<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>

Zastanawiam się, w czym problem i jak go naprawić?


1
@JiewMeng: Prawdopodobnie powinieneś zaakceptować odpowiedź Phila. Wydaje się, że jest to problem z większością dzisiejszych instalacji Apache (Apache 2.4). Dzięki.
— dotancohen

Odpowiedzi:


396

Apache 2.4.3 (a może nieco wcześniej) dodał nową funkcję bezpieczeństwa, która często powoduje ten błąd. Możesz również zobaczyć komunikat dziennika w postaci „klient odrzucony przez konfigurację serwera”. Ta funkcja wymaga tożsamości autoryzowanego użytkownika, aby uzyskać dostęp do katalogu. Jest włączana przez DEFAULT w pliku httpd.conf dostarczanym z Apache. Możesz zobaczyć włączenie tej funkcji za pomocą dyrektywy

Require all denied

Zasadniczo mówi to o odmowie dostępu wszystkim użytkownikom. Aby rozwiązać ten problem, usuń dyrektywę denied (lub znacznie lepiej) dodaj następującą dyrektywę do katalogów, do których chcesz udzielić dostępu:

Require all granted

jak w

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

9
może być również konieczne dodanie Satisfy AnypoRequire all granted
— MarkHu

@MarkHu - czy możesz wyjaśnić ewentualną konieczność Satisfy anyw tym kontekście? Pytam, ponieważ ciągnąłem tutaj włosy i dodając to, wszystko działało dla mnie. Dziwne jest to, że aplikacja działała z istniejącym wpisem vhost do ostatniej aktualizacji Apache do 2.4.9. Jeszcze dziwniejsze jest to, że działa dobrze na innym serwerze z tymi samymi wersjami app / vhost i Apache / PHP. Jednak różne serwery - odpowiednio AWS Linux i Ubuntu 14.10. Dziwne ... Chyba muszę porównać httpd.confpliki każdego serwera, aby sprawdzić, czy jest tam różnica w konfiguracji ...
— Darragh Enright

Sprawdź również swoją htaccessścieżkę, do której próbujesz się dostać
— Ujjwal Singh

Moje środowisko nie działało, dopóki nie zdecydowałem się na rozwiązanie @MarkHu Satisfy Any. Dzięki!!!
— Neonigma

nawet po zmianie na wymaganie wszystkich przyznanych wyświetla ten sam błąd Odmowa dostępu.
— Deepak

10

OK, używam złej składni, powinienem używać

Allow from 127.0.0.1
Allow from ::1
...

1
Dla apache> 2.4 to samo nie działało dla mnie. Ale zadziałało w połączeniu z Require all granted, jak zasugerował @ Phil-L
— Mugoma J. Okomba

5

W Apache 2.4 stara składnia autoryzacji dostępu została wycofana i zastąpiona przez nowy system z wymaganiem .

To, czego chcesz, to coś takiego:

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

Pozwoli to połączenia, które pochodzą zarówno z lokalnego hosta lub z adresów IP, które zaczynają się od „192.168.1”.

Dostępny jest również nowy moduł, który sprawia, że ​​Apache 2.4 rozpoznaje starą składnię, jeśli nie chcesz od razu aktualizować konfiguracji:

sudo a2enmod access_compat

1

Czy możesz spróbować zmienić „Zezwalaj z 127.0.0 192.168.1 :: 1 localhost” na „Zezwalaj ze wszystkich”. Jeśli to rozwiąże problem, musisz być mniej restrykcyjny co do tego, skąd można żądać treści


1

Oto mój plik wirtualnego hosta symfony 1.4 na Debianie, który działa dobrze.

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

Jeśli nie chcesz ograniczyć dostępu do określonego zakresu adresów IP, np. Localhost, użyj tego:

Allow from 127.0.0.0/8

Mod_authz_host jest odpowiedzialny za filtrowanie adresów IP. Możesz tam znaleźć szczegółowe informacje.

Ale może problem może być związany z jakąś błędną konfiguracją w pliku „apache2.conf”.

Na jakim systemie operacyjnym działa apache?


1

jeśli masz

Allow from All

w httpd.conf, a następnie upewnij się, że mamy

index.php

jak w poniższej linii w httpd.conf

DirectoryIndex index.html index.php

1

Miałem ten problem z Vesta CP i dla mnie sztuczka polegała na usunięciu .htaccess i ponownej próbie dostępu do dowolnego pliku.

Spowodowało to regenerację pliku .htaccess i wtedy mogłem uzyskać dostęp do moich plików.



-3

Ten kod zadziałał dla mnie ...

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

Mam nadzieję, że to pomoże innym


1
Absolutnie nie powinno się tego zachęcać do dodawania do konfiguracji Apache.
— Ricky Mutschlechner

Dzięki temu apache może uzyskać dostęp do każdego pliku na komputerze. Bardzo źle wpływa na bezpieczeństwo.
— Deleet
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.