Apache VirtualHost 403 запрещено

123

Недавно я попытался установить тестовый сервер с Apache. Сайт должен работать под доменом www.mytest.com. Я всегда получаю 403 Forbiddenошибку. Я использую серверную версию Ubuntu 10.10. Корень документа находится в каталоге dir /var/www. Вот мои настройки:

Содержимое / var / www

ls -l /var/www/

total 12
drwxr-xr-x 2 root root 4096 2011-08-04 11:26 mytest.com
-rwxr-xr-x 1 root root 177 2011-07-25 16:10 index.html

Содержимое файла хоста на сервере (с IP 192.168.2.5)

cat /etc/hosts

127.0.0.1 localhost 
127.0.1.1 americano
192.168.2.5 americano.mytest.com www.mytest.com

# The following lines are desirable for IPv6 capable hosts
::1 localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters

Конфигурация сайта

<VirtualHost *>
ServerAdmin admin@mytest.com
ServerName www.mytest.com
ServerAlias mytest.com

DocumentRoot "/var/www/mytest.com"

ErrorLog /var/log/apache2/mytest-error_log
CustomLog /var/log/apache2/mytest-access_log combined

#
# This should be changed to whatever you set DocumentRoot to.
#
<Directory "/var/www/mytest.com">
Options -Indexes FollowSymLinks
AllowOverride None

Order allow,deny
Allow from all
</Directory>
</VirtualHost>

У меня нет .htaccessфайла в корневом каталоге документа. Права установлены правильно (читаются www-данными).

Если я ввожу IP-адрес со своего рабочего стола, сайт отображается правильно. Я изменил файл hosts на своем рабочем столе, чтобы он указывал www.mytest.comна IP-адрес сервера. Когда пользуюсь, получаю 403. Поскольку многие функции этого сайта зависят от имени сайта, я должен иметь доступ к сайту по имени домена.

Еще одна интересная вещь: даже если все файлы журналов созданы правильно, в них нет информации об этой ошибке.

Я застрял. Кто-нибудь может помочь?

Ючэн Ван
источник
sudo sh -c ". /etc/apache2/envvars; apache2 -S"Можете ли вы добавить содержимое: (список виртуальных хостов) и:sudo sh -c ". /etc/apache2/envvars; grep -R Listen /etc/apache2/*|grep -v \"#\"; grep -R NameVirtual /etc/apache2/*|grep -v \"#\""
regilero
Первая команда возвращает следующее: VirtualHost configuration: 192.168.2.5:* www.mytest.com (/etc/apache2/sites-enabled/mytest.com:1) Syntax OK Вторая возвращает: /etc/apache2/ports.conf:Listen 80 /etc/apache2/ports.conf: Listen 443 /etc/apache2/ports.conf: Listen 443 /etc/apache2/conf.d/virtual.conf:NameVirtualHost *
Yuchen Wang
1
попробуйте на serverfault.com
regilero

Ответы:

296

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>
Фил Л
источник
3
Я хотел бы отметить, что если у вас возникла эта проблема с использованием виртуальных хостов, вам нужно будет добавить «Требовать все предоставлено» в настройки каждого виртуального хоста в файле apache / conf / extra / httpd-vhosts.conf.
Soundfx4
1
Я добавил эту директиву, /etc/apache2/apache2.confи это помогло, спасибо!
ДмитМедв
@ Soundfx4, apache/conf/extraвнутри папки с названием нет/etc/apache2
Black
Я добавил /var/dev/website.com и получал ошибку 403. Добавление предложенной директивы в /etc/apache2/apache2.conf (ubuntu) помогло. Спасибо, парни!
LoveFineArt
Спасибо, сэр. Apache становится все труднее и труднее работать в наши дни ...
OoDeLally
15

Для apache Ubuntu 2.4.7 я наконец обнаружил, что вам нужно внести свой виртуальный хост в белый список в apache2.conf

# access here, or in any related virtual host.
<Directory /home/gav/public_html/>
    Options FollowSymLinks
    AllowOverride None
    Require all granted
</Directory>
GAV
источник
8

Это может быть проблема с разрешениями.

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

согласно этой странице об ошибках Apache 403.

Поскольку вы используете Allow from all, ваш порядок не имеет значения, но вы можете попробовать переключить его на, Deny,Allowчтобы установить поведение по умолчанию на «разрешение».

попса
источник
4
Writable? действительно? Я не уверен
php-dev
5

Переместите предложение Directory из виртуального хоста и поместите его перед объявлением виртуального хоста.

Сводила меня тоже долго с ума. Не знаю почему. Это вещь Debian.

samtresler
источник
Вау, это так странно.
kako-nawao
1

У меня была такая же проблема с виртуальным хостом в Ubuntu 14.04.

Для меня сработало следующее решение:

http://ubuntuforums.org/showthread.php?t=2185282

Это просто добавление <Directory >тега к/etc/apache2/apache2.conf

Roland
источник
0

Если вы все сделали правильно, просто дайте разрешение домашнему каталогу, например:

sudo chmod o+x $HOME

затем

sudo systemctl restart apache2
cagcak
источник
0

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

Я изменил права доступа к каталогу, и все заработало.

Себастьян Вирек
источник
0

У меня тоже была эта проблема с Arch Linux ... это требует времени, но теперь я счастлив, что нашел свою ошибку:

Мой каталог с .htmlфайлами в моей учетной записи.
Я все включил, r+xно 403ошибка все равно появляется .
Затем я полностью вернулся и попытался настроить свой домашний каталог для выполнения, что решило мою проблему.

TornaxO7
источник
-1

Я просто потратил несколько часов на эту дурацкую проблему

Сначала измените разрешения, используя это в терминале

find htdocs -type f -exec chmod 664 {} + -o -type d -exec chmod 775 {} +

Я не знаю, в чем разница между 664 и 775. Я сделал и 775 так, как это. Также htdocs нужен путь к каталогу, например, для меня это было

/usr/local/apache2/htdocs 

find htdocs -type f -exec chmod 775 {} + -o -type d -exec chmod 775 {} +

Это еще одна глупая вещь

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

src="http://www.fakedomain.com/images/photo.png"

Обязательно иметь

EnableSendfile off in httpd.conf file
EnableMMAP off in httpd.conf file

Вы редактируете их, используя pico в терминале

Я также специально создал каталог для изображений, чтобы при вводе в адресной строке браузера domainname.com/images вы получали список фотографий, которые можно загрузить и которые необходимо успешно загрузить, чтобы указать файлы изображений, которые работают правильно.

<Directory /usr/local/apache2/htdocs/images>
AddType images/png .png
</Directory>

И это решения, которые я пробовал, теперь у меня есть работающие изображения ... ура !!!

К следующей проблеме (-ам)

Джейкоб Дэвид С. Каннингем
источник