Apache: клиент отклонен конфигурацией сервера

150

я получаю

[Вторник, 24 апреля 12:12:55 2012] [ошибка] [клиент 127.0.0.1] клиент отклонен из-за конфигурации сервера: / labs / Projects / Nebula / bin /

Моя структура каталогов выглядит так (я использую Symfony 2, должна быть похожая структура для других веб-фреймворков)

введите описание изображения здесь

У меня есть Vhosts настройки как:

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

Интересно, в чем проблема и как я могу это исправить?

Jiew Meng
источник
1
@JiewMeng: Вы, вероятно, должны принять ответ Фила. Кажется, это проблема с большинством установок Apache сегодня (Apache 2.4). Спасибо.
dotancohen

Ответы:

396

В Apache 2.4.3 (или, может быть, чуть раньше) добавлена ​​новая функция безопасности, которая часто приводит к этой ошибке. Вы также увидите сообщение журнала в форме «клиент отклонен из-за конфигурации сервера». Эта функция требует авторизованного пользователя для доступа к каталогу. Он включен DEFAULT в httpd.conf, который поставляется вместе с Apache. Вы можете увидеть включение функции с помощью директивы

Require all denied

Это в основном говорит, чтобы запретить доступ всем пользователям. Чтобы устранить эту проблему, либо удалите запрещенную директиву (или, что намного лучше), добавьте следующую директиву в каталоги, к которым вы хотите предоставить доступ:

Require all granted

как в

<Directory "your directory here">
   Order allow,deny
   Allow from all
   # New directive needed in Apache 2.4.3: 
   Require all granted
</Directory>
Фил Л
источник
9
Возможно, также необходимо добавить Satisfy AnyпослеRequire all granted
MarkHu
@MarkHu - можете ли вы объяснить возможную необходимость Satisfy anyв этом контексте? Я спрашиваю, потому что я вырывал свои волосы здесь, и добавляя это, у меня все работало. Странно то, что приложение работало с существующей записью vhost до недавнего обновления Apache до 2.4.9. Еще раз удивительно, что он отлично работает на другом сервере с теми же версиями app / vhost и Apache / PHP. Хотя разные серверы - AWS Linux и Ubuntu 14.10 соответственно. Странно ... Я думаю, мне нужно сравнить httpd.confфайлы каждого сервера, чтобы увидеть, есть ли разница в конфигурации ...
Дарра Энрайт
Также проверьте свой htaccessпуть, к которому вы пытаетесь получить доступ
Ujjwal Singh
Моя среда не работала, пока я не решил использовать решение @MarkHu Satisfy Any. Спасибо!!!
Неонигма
даже после изменения требовать все предоставленные, он показывает ту же ошибку Access Denied.
Дипак
10

ОК, я использую неправильный синтаксис, я должен использовать

Allow from 127.0.0.1
Allow from ::1
...
Jiew Meng
источник
1
Для apache> 2.4 это само по себе не может работать для меня. Но это сработало, когда совмещено с Require all granted, как предлагает @ Phil-L
Мугома Дж. Окомба,
5

В Apache 2.4 старый синтаксис авторизации доступа устарел и заменен новой системой, использующей Require .

То, что вы хотите, это что-то вроде следующего:

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

Это разрешит соединения, которые исходят либо с локального хоста, либо с IP-адресов, начинающихся с «192.168.1».

Также доступен новый модуль, который позволяет Apache 2.4 распознавать старый синтаксис, если вы не хотите сразу обновлять свою конфигурацию:

sudo a2enmod access_compat
чириканье
источник
1

Можете ли вы попробовать изменить «Разрешить с 127.0.0 192.168.1 :: 1 localhost» на «Разрешить от всех». Если это решит вашу проблему, вы должны быть менее ограничены в отношении того, откуда можно запрашивать контент

MauricioOtta
источник
1

Вот мой файл виртуального хоста Symfony 1.4 на Debian, который отлично работает.

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

Если вы не хотите ограничивать доступ к определенному диапазону IP-адресов, например, localhost, используйте это:

Allow from 127.0.0.0/8

Mod_authz_host отвечает за фильтрацию диапазонов IP - адресов. Вы можете посмотреть подробные вещи там.

Но, возможно, проблема может быть связана с некоторой неверной конфигурацией в вашем "apache2.conf".

На какой ОС работает апач?

CB0
источник
1

если у вас есть

Allow from All

в httpd.conf, то убедитесь, что у нас есть

index.php

как в строке ниже в httpd.conf

DirectoryIndex index.html index.php
Satya
источник
1

У меня была эта проблема с использованием Vesta CP, и для меня хитрость была в том, чтобы удалить .htaccess и снова попытаться получить доступ к любому файлу.

Это привело к регенерации файла .htaccess, после чего я смог получить доступ к своим файлам.

Гиль Акоста
источник
0

В моем случае ключ был:

AllowOverride All

в определении vhost. Надеюсь, это кому-нибудь поможет.

Кунегунда Гбурия-Фурия
источник
-3

Этот код работал для меня ..

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

Надеюсь, что это помогает другим

Сантош
источник
1
Это абсолютно не рекомендуется добавлять в конфигурацию apache.
Рики Мучлехнер
Это позволяет apache получить доступ к каждому файлу на компьютере. Очень плохо для безопасности.
CoderGuy123