【发布时间】:2011-10-28 00:27:47
【问题描述】:
我们在 Windows Server 2008 R2 VPS 上运行 4 个 Wordpress 网络安装,使用 Apache 2.2.17 和 PHP 5.3.10,出于某种原因,我们经常收到此(示例)错误:
错误日志
[Thu Feb 16 15:01:59 2012] [error] [client x.x.x.x] Directory index forbidden by Options directive: C:/_webserver/_www/wp/www/
访问日志
host x.x.x.x - - [17/Feb/2012:12:59:23 +0200] "GET / HTTP/1.1" 403 306 "-" "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; GTB7.2; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.2; .NET4.0C; MATM)"
错误“目录索引被禁止”通常意味着试图访问一个目录,但是没有文件(根据选项指令)要显示并且目录列表被禁止。然而,这里不是这种情况。错误是指文件夹C:/_webserver/_www/wp/www/,它是项目的webroot,并且一直有一个index.php。此外,httpd.conf 设置为:DirectoryIndex index.html index.php
看到错误在 Apache 中是如何发生的,我认为这不太可能是由 PHP 或 Wordpress 引起的。
困难在于我们不知道如何重现错误,因此我们很难对此进行测试。
我们可以做些什么来找出问题所在?它是否与 Apache 的设置有关(似乎是一个多余的问题)。它与Apache已经读取的文件有什么关系吗?有什么方法可以让我们获得有关此问题的更多信息?
我欢迎任何帮助我解决这个令人讨厌的案例。
更新
这些是我目前正在使用的模块
LoadModule deflate_module modules/mod_deflate.so
LoadModule expires_module modules/mod_expires.so
LoadModule headers_module modules/mod_headers.so
LoadModule cache_module modules/mod_cache.so
LoadModule rewrite_module modules/mod_rewrite.so
LoadModule setenvif_module modules/mod_setenvif.so
LoadModule vhost_alias_module modules/mod_vhost_alias.so
LoadModule alias_module modules/mod_alias.so
LoadModule authz_host_module modules/mod_authz_host.so
LoadModule dir_module modules/mod_dir.so
LoadModule log_config_module modules/mod_log_config.so
LoadModule mime_module modules/mod_mime.so
LoadModule php5_module "c:/_webserver/_server/php-5.3.10-Win32-VC9-x86/php5apache2_2.dll"
选项指令:
<Directory />
Options FollowSymLinks ExecCGI
AllowOverride None
Order deny,allow
Allow from all
</Directory>
<Directory "C:/Program Files (x86)/Apache Software Foundation/Apache2.2/cgi-bin">
AllowOverride None
Options None
Order allow,deny
Allow from all
</Directory>
httpd-vhosts.conf 如下所示:
NameVirtualHost *:80
<VirtualHost *:80>
<Directory "C:/_webserver/_www/sites/www">
Options FollowSymLinks
AllowOverride All
Order allow,deny
Allow from all
</Directory>
Include "C:/_webserver/_www/sites/htaccess.conf"
DocumentRoot "C:/_webserver/_www/sites/www"
ServerName xxx
ServerAlias xxx
CustomLog logs/sites.access.log mycombined
ErrorLog logs/sites.error.log
</VirtualHost>
我有 5 个这样设置的虚拟主机,每个都有自己的错误和访问日志。这些项目不使用.htaccess,但这是通过 conf 静态设置以提高性能。
服务器在 windows 上运行,所以 MPM 设置有点受限
# WinNT MPM
# ThreadsPerChild: constant number of worker threads in the server process
# MaxRequestsPerChild: maximum number of requests a server process serves
<IfModule mpm_winnt_module>
ThreadsPerChild 1750
MaxRequestsPerChild 0
</IfModule>
最终更新
好吧,我决定完全关闭 Apache 缓存,从那时起,就再也没有错误了。不幸的是,这周我没有太多时间进行适当的测试,但至少我知道问题出在哪里。并且由于服务器不是那么繁忙,所以现在没有缓存是可以的。我可能会在一段时间内回来:-)
【问题讨论】:
-
您能否提供一个在常规配置和 VirtualHosts 配置中设置的所有选项指令的示例?