Я запускаю стандартную установку Apache 2.4.6 (Amazon) с PHP 5.4.21, используя следующую конфигурацию для моего виртуального хоста:
DirectoryIndex index.php
# ...
FallbackResource /index.php
Мой index.php
это воплощение простого:
<?php echo "Hello world";
Доступ http://<server-name>/
загадочным образом показывает всю страницу только через пять секунд! Любая другая страница имеет ожидаемое время отклика (которое быстро).
Эти пять секунд, как я выяснил, связаны со временем ожидания по умолчанию Keep-Alive
характерная черта; в этом случае последние несколько байтов фрагментированного ответа не отправляются, пока Apache не разорвет соединение после этого времени ожидания. Кстати, это также полностью разрушает любые выгоды, которые в противном случае дало бы вам постоянное соединение.
Это известная ошибка Apache или мне здесь не хватает чего-то чрезвычайно очевидного?
2017/04/18: Это было исправлено в Apache 2.4.25: https://bz.apache.org/bugzilla/show_bug.cgi?id=58292
Из этот отчет об ошибке Я понял, что эта проблема может быть связана с DirectoryIndex
директива.
Стандартная установка Apache включает в себя следующий раздел в конфигурации:
<IfModule dir_module>
DirectoryIndex index.html
</IfModule>
Любые директивы, следующие за этим оператором, например, на вашем виртуальном хосте, не будут перезаписывать этот параметр; скорее, он добавляется в стопку страниц, которые будут предприняты при запросе индекса. Это поведение может быть подтверждено при выполнении strace httpd -X
и проверьте stat()
вызывает сразу после прочтения запроса, например:
stat("/path/to/vhost/index.html", 0x7fff9dc41b90) = -1 ENOENT
stat("/path/to/vhost/index.php", {st_mode=S_IFREG|0664, st_size=130, ...}) = 0
Хотя я не могу точно сказать, почему, все предыдущие DirectoryIndex
директива должна быть очищена перед указанием DirectoryIndex index.php
, т.е. index.php
ДОЛЖНА быть первой страницей, которая попыталась обработать запрос.
Это можно сделать, используя следующую конфигурацию:
DirectoryIndex disabled
DirectoryIndex index.php