Ошибка 403 после обновления до apache2.4

34

После обновления с сервера Ubuntu 13.04 страницы www не будут отображаться.

Ошибка 403 Запрещено. У вас нет прав доступа к этому серверу.

Я изменил контроль доступа с apache2.2 на apache2.4, но это не сработало. Что еще я мог сделать?

user205336
источник

Ответы:

59

Произошло то, что синтаксис файлов конфигурации в apache2.4 изменился.

Источник: это случилось со мной и после того, как я обновился до 13.10

файлы conf.d

Все файлы, которые были в /etc/apache2/conf.dдолжны быть перемещены в /etc/apache2/conf-available.

Теперь они работают так же sitesи modsработают. Просто поместите ваши файлы conf в conf-availableпапку и включите тот, который вам нужен a2enconf <config-file-name>.

Пример:

У меня был файл conf.d/httpd.confс директивой ServerName.
Чтобы это работало, мне пришлось переместить его в conf-availableкаталог и включить его вручную.

sudo mv /etc/apache2/conf.d/httpd.conf /etc/apache2/conf-available/httpd.conf
sudo a2enconf httpd

файлы сайтов

Ранее файлы в /etc/apache2/sites-availableне имели расширения. Например /etc/apache2/sites-available/default. Теперь требуется .confрасширение.

Пример:

Если у вас было /etc/apache2/sites-available/some-site, в 13.04 вы можете просто включить его, используя sudo a2ensite some-site. Теперь это даст вам ошибку, говоря

ОШИБКА: Сайт-сайт не существует!

Чтобы исправить это, добавьте .confко всем вашим файлам конфигурации в sites-available. Вы можете сделать то же самое в sites-enabled, или вы можете удалить все файлы и повторно включить их каждый вручную.
Я рекомендую делать их вручную, так как вам, вероятно, нужно исправить каждый VHost (следующий шаг).

sudo find /etc/apache2/sites-available/ ! -iname '*.conf' -type f -exec mv '{}' '{}'.conf \;

если вы решили сделать их вручную:

sudo rm /etc/apache2/sites-enabled/*
sudo a2ensite your-site-name

Директивы виртуального хоста:

разрешить / запретить против Требовать

Если у вас было следующее:

<Directory /path/to/your/site/>
    order allow,deny
    allow from all
</Directory>

Это должно стать:

<Directory /path/to/your/site/>
    Require all granted
</Directory>

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

Проще говоря, если вы обновились до apache2.4 и сохранили старую httpd.confверсию apache2.2, директива allow должна работать нормально. Если вы обновили свою версию httpd.conf(которую я бы предложил), вы получите 403 ошибки, пока вы не измените директивы Order/ Allow/ Denyна их эквивалент Require.

Параметры каталога

Если у вас есть параметры Справочника, обратите внимание, что все они должны начинаться с +или -или ни с одним из них вообще. Смешивание обоих не допускается:

Пример:

Это разрешено:

<Directory /path/to/your/site/>
    Options +Indexes +FollowSymLinks -MultiViews
</Directory>

Так вот (обратите внимание, что оба примера не делают одно и то же, предыдущий отключает эту MultiViewsопцию, а следующий нет):

<Directory /path/to/your/site/>
    Options Indexes FollowSymLinks MultiViews
</Directory>

Это больше не разрешено:

<Directory /path/to/your/site/>
    Options Indexes FollowSymLinks -MultiViews
</Directory>

Последняя опция конфигурации выдаст синтаксическую ошибку, говорящую:

Либо все Опции должны начинаться с + или -, либо никакие Опции не могут.

Перезапустите Apache

После того, как все сделано, вам нужно перезапустить сервер apache, чтобы изменения вступили в силу:

 sudo apache2ctl restart

Вы можете найти подробное руководство по обновлению с 2.2 до 2.4 в официальной документации.

Дэн
источник
1
В моей системе нет httpd.confфайла или conf.dкаталога. Но есть apache2.confфайл. Я попытался переместить его в conf-availableкаталог и получил следующую ошибку при перезапуске apache2: apache2: не удалось открыть файл конфигурации /etc/apache2/apache2.conf: такого файла или каталога нет. В чем может быть причина?
Амаль Мурали
@AmalMurali Это httpd.confбыл просто пример. Возможно, в conf.dкаталоге не будет никаких файлов конфигурации , в этом случае просто пропустите этот шаг. Что касается apache2.conf, это не должно быть перемещено в conf-availableкаталог. Это основной файл конфигурации apache, и его путь должен быть /etc/apache2/apache2.conf и не должен изменяться.
Дан
1
Вау. Это практически единственный ясный обзор, который можно найти где угодно. Спасибо.
Расс Бейтман
нет config.dили sites availableпапка. см. все конфигурационные файлы здесь: imgur.com/WczXp3v
diEcho
1
@EdwardBlack Может быть и другая причина, если вы все еще используете виртуальный хост по умолчанию, как объясняется в ответах на следующий вопрос: виртуальные хосты Apache больше не работают после обновления до 13.10
Dan
0

Я предполагаю, что веб-сайты работают на вашем сервере Ubuntu.

Проверьте ваш httpd.conf, чтобы убедиться, что настройки DocumentRoot указывают на правильное место.

Проверьте, что права доступа к папке, на которую ссылается DocumentRoot, могут быть прочитаны пользователем, от имени которого работает веб-сервер.

Убедитесь, что у вас есть соответствующий index.html / index.htm и т. Д., И что веб-сервер не пытается создать каталог.

Matt
источник
0

Я столкнулся с похожими проблемами.

Я не мог заставить работать Apache 2.4, если не использовал «Allow from All», это раздражало, так как я хотел обеспечить чистый разрыв с версиями <2.4. После долгих проб и ошибок и большого поиска я обнаружил ссылку на access_compat и понял, что это было сделано только для совместимости. Хотя в документации Apache говорится, что оба могут быть использованы, рекомендуется не делать этого.

Я удалил этот модуль из загрузочного файла / etc / sysconfig / apache2, это немедленно решило мою проблему.

С уважением, Лиам

Лиам О Доннелл
источник
-1

Я обслуживаю файлы из нестандартного каталога, поэтому, чтобы сделать обновление работоспособным, мне пришлось отредактировать /etc/apache2/apache2.conf и добавить: Опции Индексы FollowSymLinks AllowOverride Нет Требовать все предоставлено

После этого и рекомендуемых изменений выше ошибка 403 исчезла.

Купи Кукла
источник