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файли кожного сервера, щоб побачити, чи є різниця в налаштуваннях ...
Darragh Enright

Також перевірте свій htaccessшлях, яким ви намагаєтесь
дійти

Моє оточення не працювало, поки я не вирішив перейти до рішення @MarkHu Satisfy Any. Дякую!!!
Neonigma

навіть після зміни, щоб вимагати всіх наданих, він показує однакову помилку відхилений.
Діпак

10

Гаразд Я використовую неправильний синтаксис, я повинен використовувати

Allow from 127.0.0.1
Allow from ::1
...

1
Для apache> 2.4 це не могло працювати для мене. Але це спрацювало в поєднанні з Require all granted, як запропонував @ Phil-L
Mugoma J. Okomba

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 отримати доступ до кожного файлу на комп'ютері. Дуже погано для безпеки.
Делете
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.