Мы работаем с 4 сетевыми установками Wordpress на Windows Server 2008 R2 VPS с 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? Есть ли какой-нибудь способ получить больше информации об этой проблеме?
Буду рад любой помощи, которая поможет мне решить этот неприятный случай.
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
, но это статически настраивается через 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, и с тех пор больше не было ошибок. К сожалению, на этой неделе у меня не было слишком много времени, чтобы провести надлежащее тестирование, но, по крайней мере, я знаю, в чем проблема. А с не очень загруженным сервером пока нет кеширования. Я мог бы вернуться через некоторое время: -)