Я написал простой скрипт сканирования (в php) на localhost (с 4 вариантами). Все они отлично работали на локальном хосте. Но когда я переместил их на общий хостинг, двое из них работали, другие выдавали внутреннюю ошибку сервера. Я посмотрел на error_log, и я увидел следующую строку:
[Wed Jan 23 22:01:02 2013] [warn] [client ***] mod_fcgid: read data timeout in 61 seconds [Wed Jan 23 22:01:02 2013] [error] [client ***] Premature end of script headers: index.php
Я искал, но я не нашел никакого полезного результата. Что связано с этими ошибками? Есть идеи?
Если вы можете получить доступ к серверу Linux, отредактируйте /etc/httpd/conf.d/fcgid.conf
с помощью vim.
Измените FcgidIOTimeout 45
на FcgidIOTimeout 600
.
Перезапустите Apache.
Затем будет решен быстрый тайм-аут CGI.
У меня возникла проблема с экземпляром MediaTemple Grid с установкой Drupal7; оказывается, это вызвано FastCGI; переход на нормальный / стабильный CGI, похоже, устранил проблему.
Если вы используете виртуальные хосты (в моем случае у меня ispconfig), вам нужно внести изменения в файлы конфигурации виртуального хоста. Эти файлы находятся под /etc/httpd/conf/sites-available
для каждого виртуального хоста. Просто отредактируйте нужный файл конфигурации, найдите IPCCommTimeout
и установите текущее значение на большее число. Возможно, вам понадобится сделать это изменение для обеих переменных в том же файле конфигурации, если у вас есть обычные и SSL-сайты.
По сути, ваши скрипты работают слишком долго для конфигурации сервера. mod_fcgid ждет ответа php, и его набор откажется после 61 секунды. С этого общего хостинга вам не разрешается изменять его.
Это не то, что должно выполняться через браузер / веб-сервер в любом случае. Напишите его как консольный скрипт.
Если какая-либо проблема связана с mod_fcgid, как показано ниже: _mod_fcgid: чтение таймаута данных в XX секундах _mod_fcgid: не может применяться слот процесса для
Устраните эти проблемы с приоритетом:
_Increasing the memory limit of php (default 128M, up to 256, 384, ... then restart apache anh check it again) _Increasing the time out of FCGI, but not need if above is ok
чтение таймаута данных за 61 секунду
Они приурочивались. Вероятно, ваше время выполнения установлено на 60 секунд. Таким образом, на 61 секунде процесс был убит и поэтому имел преждевременный конец .
Вы можете настроить таймаут (не рекомендуется) или запустить сценарий через другой источник (рекомендуется).
mod_cfgid вводит другие временные рамки помимо PHP max_execution_time
при выполнении php-скриптов. Какой бы ни был первый «побед».
Насколько я могу судить, существуют многочисленные элементы конфигурации времени, которые mod_cfgid считает, и я не эксперт, чтобы сказать, что делает, но, по крайней мере, в нашем случае добавив следующую строку
IPCCommTimeout 9999
в fcgid.conf
решены наши неожиданные проблемы с тайм-аутом.