Учитывая следующий код 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-х и тает?
РЕДАКТИРОВАТЬ: После дальнейшего расследования выясняется, что это какая-то проблема с сетью, когда 404s между хостингом и нашим офисом убиты с сбросом соединения. Итак, закрытие, потому что это не то, что кто-то здесь может ответить ;-) Спасибо!