Учитывая следующий код PHP 5.1.6, обслуживаемый через Apache 2.2.9:
<?php
header("HTTP/1.1 404 Not Found");
Когда я просматриваю этот файл (в любом браузере), я получаю сообщение «сброс соединения». (Firefox говорит: «Соединение с сервером было сброшено во время загрузки страницы», а Chrome говорит: «Соединение с staging.neopets.com было прервано». Не имеет значения, есть ли какое-либо тело после вызова заголовка.
httpd.conf
имеет правила перезаписи, которые заставляют все запросы выполняться через скрипт переднего контроллера. Вот так это работает годами. Фронт-контроллер пытается направить запрос, и если он не может, он устанавливает код ответа на 404, показывает какую-то копию ошибки и завершает работу. По какой-то причине сегодня он решил сойти с ума и взорваться всякий раз, когда
error.log
ничего не показывает. access.log
показывает запросы, обслуживаемые как 404:
192.168.0.2 - - [26/Jan/2012:12:03:11 -0800] "GET /text.php HTTP/1.1" 404 20 "-" "Mozilla/5.0 (X11; Linux i686; rv:8.0.1) Gecko/20100101 Firefox/8.0.1"
Конфигурация Apache не менялась несколько месяцев. Все остальные ответы заголовков работают нормально (401, 403, 200, 302 и т. д.), все остальное совершенно нормально, но по какой-то причине, если у меня PHP делает вызов выше, он сбрасывает соединение.
Я даже наблюдал это с помощью Wireshark, и он отправляет обратно целую кучу RST,ACK
пакетов после отправки запроса.
Выполнение wget localhost/test.php
(с рассматриваемой машины) работает нормально, но выполнение wget badhost/test.php
(с другой машины) также показывает ошибку сброса соединения. Может быть, Apache выполняет какой-то обратный поиск IP-адресов при удаленных запросах на 404-е и плавится?
РЕДАКТИРОВАТЬ: после дальнейшего расследования выяснилось, что это какая-то проблема с сетью, когда ошибки 404 между хостингом и нашим офисом уничтожаются при сбросе соединения. Итак, закрываю, потому что никто здесь не может ответить ;-) Спасибо!