Apache:Options指令禁止的目录索引
我们正在Windows Server 2008 R2 VPS上运行4个Wordpress网络安装,使用Apache 2.2.17和PHP 5.3.10,出于某种原因,我们定期收到以下(示例)错误: 错误日志Apache:Options指令禁止的目录索引,apache,caching,apache2,Apache,Caching,Apache2,我们正在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 - - [
[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)"
访问日志
[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)"
“目录索引禁止”错误通常意味着试图访问目录,但没有要显示的文件(根据options指令),目录列表被禁止。然而,这里的情况并非如此。错误指向文件夹C://\u webserver/\u www/wp/www/
,该文件夹是项目的webroot,并且始终具有索引.php
。另外,httpd.conf
设置为:DirectoryIndex.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>
最终更新
嗯,我决定完全关闭Apache缓存,从那时起,就再也没有错误了。不幸的是,本周我没有太多时间进行适当的测试,但至少我知道问题所在。对于一个不那么繁忙的服务器,现在没有缓存是可以的。过一会儿我可能会回来:-)如果是间歇性的,可以猜测有人在间歇性地删除和替换index.php
重新评论——这不需要“破坏”。如果您只是在运行的Web服务器上重新部署某种类型的应用程序,或者恢复备份,Apache可能会在某个时间窗口中看到此目录中的一个文件,但没有文件。这当然是很难调试的,偶尔出现的错误是最糟糕的:-) 我的第一个想法是“内部dumy连接”相关问题,但这不会在access.log中显示IE8测试版签名 因此,我发现了三个链接,您可以进行调查:
- ,检查出现该错误时是否未到达MaxClient
wget
或ab
或任何其他大规模HTTP请求工具重现该错误- mod_协商(使用相关的
)。在与浏览器标题协商之后,Apache尝试提供备用文件。这可能会破坏您的重写规则或与其他模块的交互不好。这通常会导致对错误查询的一些无人响应,我总是删除该模块选项multiview
- mod_include:服务器端包括(带有相关的
选项包括),也称为SSI。谁真的需要这个
- mod_缓存&mod_磁盘缓存,实际上,这是一个非常古老的概念,您最好尝试使用Varnish或任何其他反向代理缓存
- mod_rewrite:瑞士刀,但你确定你没有在什么地方写过一条非常奇怪的规则吗
- mod_dir:检查您没有
,这可能会与执行奇怪操作的其他模块发生严重交互directorysash Off
- mod_isapi:阅读可能会给你一些提示。对我来说,我觉得这是一个实验性的支持,在沉重的负荷下,我很确定奇怪的事情会发生
- mod_proxy:如果不需要,请将其删除
我认为这在Windows上不起作用,因为您的根目录是c:not/。但我可能错了。至少在这里,您不需要一个
,非常不安全allow
- 如果不使用.htaccess文件,请将
设置为无处不在,尤其是在AllowOverride None
中,以避免从根目录中查找这些文件
现在来解决你的问题。我在您的配置中没有看到任何与mod_缓存相关的选项(但可能您在apache配置的子目录中包含了一些使用mod_cache指令的文件。如果您不使用其中任何一个指令,您可以挂起该模块而不会有任何风险。您能否提供在常规配置和虚拟主机配置中设置的所有选项指令的示例?谢谢,我们将返回更多详细信息。)哦!我已经更新了上面的问题。我怀疑缓存模块可能会导致此问题,
MaxClients
不适用于Windows。我已经尝试优化服务器,但也许我应该重新考虑兑现问题。我认为Varnish不适用于Windows。我觉得这可能不是问题所在。