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.