После обновления операционной системы, которое включало обновление Apache с 2.2 до 2.4, теперь я получаю 403-е, пытающиеся получить доступ http://files.fierydragonlord.com/ и http://status.fierydragonlord.com/. Тем не мение, http://www.fierydragonlord.com работает. В чем дело?
Вот мой vhosts.conf:
#
# VirtualHost template
# Note: to use the template, rename it to /etc/apache2/vhost.d/yourvhost.conf.
# Files must have the .conf suffix to be loaded.
#
# See /usr/share/doc/packages/apache2/README.QUICKSTART for further hints
# about virtual hosts.
#
# NameVirtualHost statements can be added to /etc/apache2/listen.conf.
#
# Almost any Apache directive may go into a VirtualHost container.
# The first VirtualHost section is used for requests without a known
# server name.
#
NameVirtualHost *:80
<VirtualHost *:80>
ServerName www.fierydragonlord.com
# Specify alternative domain names for the virtual host like this
# (wildcards * and ? may be used, and multiple aliases may be specified):
# ServerAlias domain.tld extra.domain.tld *.domain.tld
# DocumentRoot: The directory out of which you will serve your
# documents. By default, all requests are taken from this directory, but
# symbolic links and aliases may be used to point to other locations.
DocumentRoot /srv/www/htdocs/
# Set log file location
ErrorLog /var/log/apache2/error_log
CustomLog /var/log/apache2/access_log combined
# don't loose time with IP address lookups
HostnameLookups Off
# needed for named virtual hosts
UseCanonicalName Off
# configures the footer on server-generated documents
ServerSignature On
# Use custom error documents
ErrorDocument 400 /00-Error/400.php
ErrorDocument 401 /00-Error/401.php
ErrorDocument 403 /00-Error/403.php
ErrorDocument 404 /00-Error/404.php
ErrorDocument 410 /00-Error/410.php
ErrorDocument 414 /00-Error/414.php
ErrorDocument 500 /00-Error/500.php
ErrorDocument 503 /00-Error/503.php
</VirtualHost>
<VirtualHost *:80>
ServerName status.fierydragonlord.com
# Specify alternative domain names for the virtual host like this
# (wildcards * and ? may be used, and multiple aliases may be specified):
# ServerAlias domain.tld extra.domain.tld *.domain.tld
# DocumentRoot: The directory out of which you will serve your
# documents. By default, all requests are taken from this directory, but
# symbolic links and aliases may be used to point to other locations.
DocumentRoot /srv/www/vhosts/status/
DirectoryIndex index.php
# Set log file location
ErrorLog /var/log/apache2/status-error_log
CustomLog /var/log/apache2/status-access_log combined
# don't loose time with IP address lookups
HostnameLookups Off
# needed for named virtual hosts
UseCanonicalName Off
# configures the footer on server-generated documents
ServerSignature On
<Directory />
Options None
Require all granted
</Directory>
# use .htaccess files for overriding,
AccessFileName .htaccess
# and never show them
<Files ~ "^\.ht">
Require all denied
</Files>
</VirtualHost>
<VirtualHost *:80>
ServerName files.fierydragonlord.com
# Specify alternative domain names for the virtual host like this
# (wildcards * and ? may be used, and multiple aliases may be specified):
# ServerAlias domain.tld extra.domain.tld *.domain.tld
# DocumentRoot: The directory out of which you will serve your
# documents. By default, all requests are taken from this directory, but
# symbolic links and aliases may be used to point to other locations.
DocumentRoot /srv/www/vhosts/files/
DirectoryIndex index.html
# Set log file location
ErrorLog /var/log/apache2/files-error_log
CustomLog /var/log/apache2/files-access_log combined
# don't loose time with IP address lookups
HostnameLookups Off
# needed for named virtual hosts
UseCanonicalName Off
# configures the footer on server-generated documents
ServerSignature On
<Directory />
Options None
Require all granted
</Directory>
# use .htaccess files for overriding,
AccessFileName .htaccess
# and never show them
<Files ~ "^\.ht">
Require all denied
</Files>
# Use custom error documents
ErrorDocument 400 /00-Error/400.php
ErrorDocument 401 /00-Error/401.php
ErrorDocument 403 /00-Error/403.php
ErrorDocument 404 /00-Error/404.php
ErrorDocument 410 /00-Error/410.php
ErrorDocument 414 /00-Error/414.php
ErrorDocument 500 /00-Error/500.php
ErrorDocument 503 /00-Error/503.php
</VirtualHost>
У меня в журнале появляются такие ошибки:
[Fri Nov 22 12:37:53.271724 2013] [access_compat:error] [pid 5445] [client xxx.xxx.xxx.xxx:xxxx] AH01797: client denied by server configuration: /srv/www/vhosts/status/, referer: http://www.fierydragonlord.com/
[Fri Nov 22 12:46:14.115480 2013] [access_compat:error] [pid 5440] [client xxx.xxx.xxx.xxx:xxxx] AH01797: client denied by server configuration: /srv/www/vhosts/status/index.php
apache2ctl -S
возвращает следующее:
[Fri Nov 22 12:56:50.229301 2013] [core:warn] [pid 5529] AH00117: Ignoring deprecated use of DefaultType in line 140 of /etc/apache2/httpd.conf.
AH00548: NameVirtualHost has no effect and will be removed in the next release /etc/apache2/vhosts.d/vhosts.conf:16
VirtualHost configuration:
*:80 is a NameVirtualHost
default server www.fierydragonlord.com (/etc/apache2/vhosts.d/vhosts.conf:18)
port 80 namevhost www.fierydragonlord.com (/etc/apache2/vhosts.d/vhosts.conf:18)
port 80 namevhost www.fierydragonlord.com (/etc/apache2/vhosts.d/vhosts.conf:18)
port 80 namevhost status.fierydragonlord.com (/etc/apache2/vhosts.d/vhosts.conf:53)
port 80 namevhost status.fierydragonlord.com (/etc/apache2/vhosts.d/vhosts.conf:53)
port 80 namevhost files.fierydragonlord.com (/etc/apache2/vhosts.d/vhosts.conf:92)
port 80 namevhost files.fierydragonlord.com (/etc/apache2/vhosts.d/vhosts.conf:92)
ServerRoot: "/srv/www"
Main DocumentRoot: "/srv/www/htdocs"
Main ErrorLog: "/var/log/apache2/error_log"
Mutex ssl-stapling: using_defaults
Mutex ssl-cache: using_defaults
Mutex default: dir="/run/" mechanism=default
Mutex mpm-accept: using_defaults
PidFile: "/run/httpd.pid"
Define: DUMP_VHOSTS
Define: DUMP_RUN_CFG
User: name="wwwrun" id=30
Group: name="www" id=8
Apache 2.4 обрабатывает директиву виртуального хоста иначе, чем 2.2, посмотрите примеры по следующей ссылке.
http://httpd.apache.org/docs/current/vhosts/examples.html
По сути, измените NameVirtualHost *: 80 -> Listen 80
Вот так это выглядит:
Listen 80
# This is the "main" server running on 172.20.30.40
ServerName server.example.com
DocumentRoot /www/mainserver
<VirtualHost 172.20.30.50>
DocumentRoot /www/example1
ServerName www.example.com
# Other directives here ...
</VirtualHost>
<VirtualHost 172.20.30.50>
DocumentRoot /www/example2
ServerName www.example.org
# Other directives here ...
</VirtualHost>
Вы также можете проверить остальную часть ваших httpd.conf и vhosts.conf на предмет других устаревших рекомендаций и конфликтов. См. Эту ссылку. http://httpd.apache.org/docs/trunk/upgrading.html
Ваш собственный ответ частично правильный, порядок / требование изменения, но если вы просмотрите эту страницу, вы увидите еще несколько. Я бы посоветовал внимательно прочитать его и убедиться, что вы все усвоили. Даже если вы заставите его работать, проверьте и дважды проверьте, некоторые изменения могут не нарушить работу apache или даже журнала .. но могут вызвать другие проблемы (безопасность / стабильность).
Оказывается, есть конфликт между старшими Order deny,allow
синтаксис и новее Require all granted
синтаксис. Основные файлы конфигурации системы, предоставленные самой openSUSE, не настроены для использования более новой версии. Require
синтаксис. Поскольку Order
синтаксис обрабатывается другим модулем, чем Require
синтаксис, старый синтаксис переопределяет новый синтаксис, вызывая его сбой.
Я вернулся к старшему Order
синтаксис с примечанием в настраиваемых файлах конфигурации, объясняющим проблему.