У меня есть 32-разрядная машина с Windows Server 2003 R2, на которой работает Apache 2.4.2 с OpenSSL 1.0.1c и PHP 5.4.5 через mod_fcgid 2.3.7. Эта конфигурация работала нормально в течение нескольких часов, но затем сайт не мог быть достигнут с его доменным именем, скажем www.example.com
, но он все еще доступен по его IP-адресу.
В частности, пока https://www.example.com/
выдала ошибку подключения, http://123.1.2.3/
работал нормально. Да, сначала https, затем http.
Журналы ошибок и доступа были чистыми, т. Е. Не показывали никаких признаков проблем. Просто обычные сообщения, которые были прерваны, пока сайт не был доступен.
После некоторого исследования проблема была решена простым перезапуском Apache. К сожалению, у меня не было возможности проверить, https://123.1.2.3/
также работал, или если http://www.example.com/
по-прежнему перенаправлялся на https как обычно.
Итак, кто-нибудь знает, что произошло? Прежде чем я устану от Apache и откажусь от него в пользу Nginx?
Редактировать: Некоторая информация журнала.
Последняя строка sslerror.log
за 90 минут до возникновения проблемы, поэтому я думаю, это не важно. ssl_request.log
тоже ничего интересного не показывает: это последние две строчки перед задачей:
[28/Aug/2012:17:47:54 +0200] x.x.x.x TLSv1.1 ECDHE-RSA-AES256-SHA "GET /login HTTP/1.1" 1183
[28/Aug/2012:17:47:45 +0200] y.y.y.y TLSv1 ECDHE-RSA-AES256-SHA "POST /upf HTTP/1.1" 73
Все предыдущие строки такие же и не кажутся интересными, за исключением 4 строк, подобных этим за 30-40 секунд до проблемы:
[28/Aug/2012:17:47:14 +0200] z.z.z.z TLSv1 ECDHE-RSA-AES256-SHA "-" -
Это соответствующие строки из sslaccess.log
:
z.z.z.z - - [28/Aug/2012:17:47:14 +0200] "-" 408 -
...
x.x.x.x - - [28/Aug/2012:17:47:54 +0200] "GET /login HTTP/1.1" 200 1183
y.y.y.y - - [28/Aug/2012:17:47:45 +0200] "POST /upf HTTP/1.1" 200 73
Кажется, время ожидания некоторых соединений истекло?
Виртуальный сервер, прослушивающий порт 80, обычно перенаправляет все подключения на протокол https, поэтому access.log
не показывает ничего за 40 минут до возникновения проблемы. error.log
показывает некоторые предупреждения за 4 минуты до проблемы:
[Tue Aug 28 17:53:30.921034 2012] [fcgid:warn] [pid 1964:tid 1728] mod_fcgid: process 1852 graceful kill fail, sending SIGKILL
Получаете много предупреждений, я думаю, это нормально?
Это похоже на проблему с DNS. Когда сайт становится недоступным по имени, вам необходимо сначала убедиться, что имя правильно разрешается в IP-адрес сервера. Есть много способов сделать это, например, выполнить nslookup
или даже просто ping
имени. Только если вы действительно получаете правильный адрес, вы можете начать смотреть на Apache.