将Apache从2.2更新到2.4后,子域返回HTTP 403

在将Apache从2.2更新到2.4的操作系统升级之后,我现在正在尝试访问http://files.fierydragonlord.com/和http://status.fierydragonlord.com/的 403s。 但是, 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

你自己的答案是部分正确的,命令/需要改变,但如果你浏览该页面,你会看到更多。 我build议你仔细阅读,确保你已经解决了所有问题。 即使你得到它的工作,检查和仔细检查,一些变化可能不会打破Apache甚至login..但可能会导致其他问题(安全性/稳定性)。

事实certificate,在较旧的Order deny,allow语法和较新的Require all granted语法之间存在冲突。 系统的主configuration文件(由openSUSE本身提供)未configuration为使用较新的Require语法。 因为Order语法是由不同于Require语法的模块处理的,所以较旧的语法覆盖较新的语法,导致它失败。

我已经恢复到较旧的Order语法,在解释问题的自定义configuration文件中有一个注释。