gpt4 book ai didi

Apache:选项指令禁止的目录索引

转载 作者:行者123 更新时间:2023-12-04 15:26:20 28 4
gpt4 key购买 nike

我们在 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 缓存,从那时起,就再也没有错误了。不幸的是,这周我没有太多时间进行适当的测试,但至少我知道问题出在哪里。并且由于服务器不是那么繁忙,所以现在没有缓存是可以的。我可能会在一段时间内回来:-)

最佳答案

这肯定是很难调试的,偶尔的错误是最糟糕的:-)

我的第一个想法是“内部虚拟连接”相关问题,但这不会在 access.log 中显示 IE8-beta 签名。

所以我发现了三个你可以调查的链接:

  • A serverFault intermittent 403 problem, related to mod_negotiation and SSI
  • Another serverFault intermittent 403, related to MaxClients reached ,请检查您是否未到达 最大客户 当该错误出现时。
  • A deep analysis of intermittent 403 related to mod_cache

  • 我认为这种问题有点像药物相互作用。所以首先要做的是:
  • 检查在您的 apache 配置中加载的模块并删除(注释加载行)您根本不需要的那些(如果您以前从未这样做过,您将拥有更快的 Apache!)。
  • 为您仍在生产中使用的模块构建一个测试环境(删除它会使您的应用程序崩溃)。您需要能够使用 wget 重现该错误。或 ab或任何其他海量 HTTP 请求工具。
  • 尝试一个一个不活动的模块,直到问题消失。

  • 通常会产生奇怪行为的模块是:
  • mod_negotiation (与相关的 Option Multiviews )。在与浏览器 header 协商后,Apache 尝试提供备用文件。这可能会破坏您的 RewriteRules 或与其他模块交互不良。这通常会导致对格式错误的查询做出一些无人注意的响应,我总是删除该模块。
  • mod_include :服务器端包含(与相关的 option Includes ),也称为 SSI。谁真的需要那个?
  • mod_cache & mod_disk_cache ,真的,这是一个非常古老的东西,你最好尝试使用 Varnish 或任何其他反向代理缓存
  • mod_rewrite : 瑞士刀,但你确定你没有在某个地方写过一个非常奇怪的规则吗?
  • mod_dir : 检查你没有DirectorySlash Off ,这可能会与其他一些做奇怪事情的模块交互不良
  • mod_isapi : 阅读 the doc可能会给你一些提示。对我来说,我觉得这是一个实验性的支持,在重负载时我很确定可能会发生奇怪的事情。
  • mod_proxy : 不需要就删除

  • 更新:(配置详细信息后)
    阅读您的配置,我看到了几个小错误(不相关):
  • <Directory />我认为这不适用于 Windows,因为您的根目录是 c: 而不是/。但我可能错了。至少你不需要 allow from all在这里,相当不安全。
  • 如果您不使用 .htaccess 文件,请设置 AllowOverride None无处不在,尤其是在 <Directory "C:"> , 以避免从根目录中寻找这些文件。

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

    关于Apache:选项指令禁止的目录索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7077894/

    28 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com