Ric*_*ard 6 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/
Run Code Online (Sandbox Code Playgroud)
访问日志
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)"
Run Code Online (Sandbox Code Playgroud)
错误"目录索引禁止"通常意味着尝试访问目录,但没有要显示的文件(根据options指令),禁止目录列表.然而,这不是这种情况.错误是指文件夹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"
Run Code Online (Sandbox Code Playgroud)
选项指令:
<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>
Run Code Online (Sandbox Code Playgroud)
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>
Run Code Online (Sandbox Code Playgroud)
我有5个这样的虚拟主机设置,每个都有自己的错误和访问日志.这些项目不使用a .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>
Run Code Online (Sandbox Code Playgroud)
最后更新
好吧,我决定完全关闭Apache缓存,从那以后,没有更多的错误.不幸的是,我本周没有太多时间做适当的测试,但至少我知道问题出在哪里.并且有一个不那么繁忙的服务器,现在没有缓存是好的.我可能会在一段时间后回来:-)
这肯定是很难调试的,偶尔出现的错误是最糟糕的:-)
我的第一个想法是“内部虚拟连接”相关问题,但这不会在 access.log 中显示 IE8-beta 签名。
所以我找到了三个您可以调查的链接:
由此我认为这种问题有点像药物相互作用。所以首先要做的是:
wget或ab或任何其他大规模 HTTP 请求工具重现该错误。通常会产生奇怪行为的模块是:
Option Multiviews)。在与浏览器标头协商后,Apache 将尝试提供备用文件。这可能会破坏您的 RewriteRules 或与其他模块交互不良。这通常会导致对格式错误的查询进行一些无人值守的响应,我总是删除该模块。option Includes),也称为 SSI。谁真正需要那个?DirectorySlash Off,这可能会与其他一些模块发生奇怪的事情交互不良更新:(配置详细信息之后) 阅读您的配置我看到了几个小错误(不相关):
<Directory />我认为这在 Windows 上不起作用,因为你的根目录是 c: 而不是 /。但我也许错了。至少你不需要allow from all在这里,相当不安全。AllowOverride None在各处设置,尤其是在 .htaccess 文件中<Directory "C:">,以避免从根目录查找这些文件。现在解决你的问题。我在您的配置中没有看到任何与 mod_cache 相关的选项(但也许您在 apache 配置的子目录中包含一些使用 mod_cache 指令的文件。如果您不使用任何 mod_cache 指令,您可以毫无风险地挂起该模块。
| 归档时间: |
|
| 查看次数: |
8923 次 |
| 最近记录: |