2011-08-16 60 views
6

我们在Windows Server 2008 R2 VPS上运行4个Wordpress网络安装,使用Apache 2.2.17和PHP 5.3.10,由于某些原因,我们定期使用获取此(样本)错误:Apache:通过Options指令禁止的目录索引

错误日志

[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已经读取的文件有关吗?有什么方法可以获得有关此问题的更多信息?

我欢迎任何帮助来帮助我解决这个恶心的案件。

UPDATE

这些是我目前在使用

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,但是这是通过性能配置静态设置的。

服务器运行在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的缓存,从那时起,没有更多的错误。不幸的是,本周我没有太多时间做适当的测试,但至少我知道问题出在哪里。而且,如果服务器不是太忙,现在暂时没有缓存。我可能会回来一段时间:-)

+0

你可以提供一个在一般配置和VirtualHosts配置中设置的所有Options指令的示例吗? – regilero

+0

我已更新我的问题。 – Richard

回答

4

这肯定是一些难以调试,偶尔的错误是:-)

我的第一个想法是“内部dumy连接”相关的问题最严重的,但不会告诉你在访问的IE8-β签名日志。

于是我发现了三个链接,你可以调查:

从,我认为这样的问题有点像药物相互作用。所以,我们要做的第一件事是:装在你的Apache配置

  1. 检查模块和删除(注释载重线)你并不需要在所有的人(你将会有更快的Apache,如果你从来没有它之前!)。
  2. 构建一个测试环境,对于您在生产中仍然使用的模块(删除它会导致应用程序崩溃)。您需要能够使用wgetab或任何其他大量的HTTP请求工具重现该错误。
  3. 尝试逐个激活模块,直到问题消失。

模块通常会发出奇怪的行为是:

  • mod_negotiation模块(与相关Option Multiviews)。然后,Apache在与浏览器标题保持关联之后尝试提供备用文件。这可能会破坏您的RewriteRules或与其他模块严重交互。这通常会导致对格式不正确的查询不满意,我总是删除该模块。
  • mod_include:服务器端包括(与相关的option Includes),也被称为SSI。谁真的需要这个?
  • mod_cache的 & mod_disk_cache,真的,这是一个非常老派的东西,你最好尝试使用清漆或任何其他反向代理缓存
  • mod_rewrite的:瑞士军刀,但是你确定你没在某处写了一个非常奇怪的规则?
  • mod_dir:检查你没有DirectorySlash Off,可以与其他模块做奇怪的事情
  • mod_isapi严重交互:阅读the doc可能会导致你一些提示。对我而言,我有这种感觉,这是一种实验性的支持,在沉重的负载下我相当确定会发生奇怪的事情。
  • mod_proxy的:删除它,如果你不需要它

UPDATE:(后配置的详细信息) 读你的配置我看见几个小错误(无关):

  • <Directory />我不认为这可以在Windows上运行,因为你的根目录是c:not /。但我可能是错的。至少你不需要allow from all这里,相当不安全。
  • 如果您不使用.htaccess文件,请在任何地方设置AllowOverride None,尤其是在<Directory "C:">中,以避免从根目录中查找这些文件。

现在为您的问题。我的配置中没有看到任何与mod_cache相关的选项(但是也许你在apache配置的子目录中有一些使用mod_cache指令的包含文件,如果你没有使用任何mod_cache directives,那么可以毫无风险地挂起该模块。

+0

谢谢,明天将回来更多的细节! – Richard

+0

我已经更新了我的问题。我怀疑缓存模块可能会导致问题,MaxClients不适用于Windows。我已经试图优化服务器,但也许我应该重新看看兑现。我认为Varnish不适用于Windows .. – Richard

0

如果它是间歇性的,那么猜测有人会间歇性地删除并替换index.php是公平的。

重新评论 - 这不需要'破坏'。如果您只是使用正在运行的Web服务器重新部署某些应用程序样式,或者恢复备份,则Apache可能会看到此目录但没有文件时有一段时间。

+2

很好的回答!谢谢 – Richard

+1

我觉得这可能不是问题 –

+1

破坏:不错的想法:) – williamcarswell

相关问题