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>

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


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

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» на «Разрешить от всех». Если это решит вашу проблему, вы должны быть менее ограничены в отношении того, откуда можно запрашивать контент


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

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


1

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

Allow from All

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

index.php

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

DirectoryIndex index.html index.php

1

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

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



-3

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

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

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


1
Это абсолютно не рекомендуется добавлять в конфигурацию apache.
Рики Мучлехнер

Это позволяет apache получить доступ к каждому файлу на компьютере. Очень плохо для безопасности.
CoderGuy123
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.