Если в логах сайта возникает ошибка mod_fcgid: read data timeout in 40 seconds, то это значит что апач через mod_fcgid передал некие данные php-скрипту на обработку, подождал 40 секунд и не получив ответа в этот срок возвратил ошибку (для посетителя она выглядит как 504). 

Способы решения проблемы: 

Способ первый — уменьшить время работы проблемного скрипта.

Часто проблемы такого рода возникают со скриптами обрабатывающими большое количество данных. В этом случае разбиение задачи на более мелкие части решает вопрос.

Ещё такая же ошибка может наблюдаться и в ситуации когда в процессе выполнения скрипта происходит обращение к какому-то внешнему ресурсу (например, к удалённому серверу), который на данный момент недоступен или просто «тормозит» не успевая дать ответ вовремя или не давая его вовсе. В этом случае нужно или восстановить доступность/быструю работу удалённого сервиса, или перейти к второму способу.  

Способ второй — увеличить время ожидания mod_fcgid. Для этого откройте файл

  • в CentOS /etc/httpd/conf.d/fcgid.conf  
  • в Debian/Ubuntu  /etc/apache2/mods-available/fcgid.conf

И отредактируйте (если нету, то добавьте) строку: 

IPCCommTimeout 300

, где вместо 300 — нужно подставить подходящее время ожидания. Слишком большое ставить не нужно. 

Не забудьте перезапустить apache!