У меня странная проблема с WinCache, и, возможно, это не лучший форум. Я проверил SuperUser, но есть 0 результатов относительно WinCache. Кажется, что поддержка в сети слабая, но по крайней мере SO уже обсуждала это раньше.
У меня есть работающий сайт и сайт разработки на одном сервере (платформа CakePHP, Windows Server 2008 R2, IIS 7.5, PHP 5.3, FastCGI, WinCache 1.1). Живой сайт находится на порте 80, а dev на 81. У IIS есть два веб-сайта, каждый из которых указывает на свою корневую папку в Inetpub \ wwwroot. Каждый сайт работает в своем пуле приложений.
Через некоторое время после внесения изменений в сайт разработчика сайт начал давать ошибки. После некоторой болезненной отладки я обнаружил, что происходит следующая (совершенно неубедительная) цепочка событий:
- Живой PHP-скрипт загружается как обычно после GET-запроса
- Живой PHP-скрипт POST к себе как обычно после выбора пользователя
- PHP-скрипт Dev обрабатывает POST-запросы и ошибки, когда параметры формы не соответствуют ожидаемым.
Если я проверяю свойства WinCache через веб-интерфейс через порт 80 (действующий сайт), я вижу, что корнем документа является Inetpub \ wwwroot \ Live - как и ожидалось. Однако, если я просматриваю список кэшированных файлов на вкладке кэш файлов, я вижу, что некоторые файлы кэшируются дважды. При наведении курсора мне сообщают, что один из Inetpub \ wwwroot \ Dev, а другой из Inetpub \ wwwroot \ Live.
Как это возможно? Почему IIS использует один в GET-запросе, а другой в POST? Я знаю, что CakePHP выбирает, какие файлы загружать, основываясь на отформатированном URL, но файл index.php, который обрабатывает маршрутизацию, находится в Inetpub \ wwwroot \ Live, поэтому, по-видимому, никогда не сможет запросить файл в другом корне документа. Мне кажется, что PHP запрашивает IIS для файла, но IIS теряет свои шарики при взаимодействии с WinCache.
Пока что я не вижу способа отключить WinCache для одного сайта, но даже если бы мог, я бы больше ему не доверял.
Будем весьма благодарны за любые предложения по этому неприятному вопросу.