我们正在Windows 2008 R2 VPS上运行4个Wordpress网络安装程序,Apache2.2.17和PHP5.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缓存,从那时起,就不再有错误了。不幸的是,这周我没有太多的时间做适当的测试,但至少我知道问题的所在。在服务器不那么繁忙的情况下,暂时不需要缓存。我可能会回来一段时间:)
发布于 2012-02-19 10:16:45
这当然是很难调试的,偶尔的错误是最糟糕的:-)
我的第一个想法是“内部虚拟连接”相关的问题,但这将不会显示在access.log IE8-beta签名。
所以我发现了三个你可以调查的链接:
因此,我认为这种问题有点像药物的相互作用。所以首先要做的是:
wget或ab或任何其他大规模的HTTP工具再现该bug。通常会产生奇怪行为的模块有:
Option Multiviews)。然后,Apache试图在与浏览器头进行重新定位之后,提供备用文件。这可能会破坏您的RewriteRules或与其他模块交互不良。这通常会导致对格式错误的查询不加注意的响应,我总是删除该模块。option Includes),也称为SSI。谁真的需要那个?DirectorySlash Off,它可能与执行奇怪事情的其他模块交互很糟糕更新:(配置细节之后)阅读您的配置我看到了几个小错误(无关):
<Directory /> --我认为这在Windows上行不通,因为你的根目录是c:而不是/。但我可能错了。至少这里不需要allow from all,非常不安全。AllowOverride None,特别是在<Directory "C:">中,以避免从根目录中查找这些文件。现在轮到你了。我在您的配置中没有看到任何与mod_cache相关的选项(但是您可能在apache的子目录中包含了一些使用mod_cache指令的文件。如果您不使用任何缓存指令,则可以在没有任何风险的情况下挂起该模块。
发布于 2012-02-17 12:41:53
如果是断断续续的,那么可以猜到有人在断断续续地删除和替换index.php。
关于评论-这不需要‘破坏’。如果您只是使用正在运行的see服务器重新部署某种类型的应用程序,或者还原备份,那么Apache可能会看到这个目录,但没有文件,这是一个时间窗口。
https://stackoverflow.com/questions/7077894
复制相似问题