Я надеюсь, что вы все можете помочь мне немного. Я потратил около 7 часов, пытаясь найти ответ, и до сих пор перепробовал много вещей.
У меня есть сценарий PHP, который используется для синхронизации файлов / данных базы данных между 2 серверами. Прежде чем вы, ребята, спросите, этот процесс необходим для этого проекта и должен оставаться на месте.
Сценарий в основном находит все файлы в каталоге, которые изменились за последние 72 часа, и отправляет их по SFTP на другой сервер, заменяя все необходимые файлы. Затем он создает копию резервной базы данных, удаляет определенные таблицы / строки, изменяет другие и экспортирует файл .sql. Затем SFTP передает этот файл .sql на другой сервер и вызывает включение файла на 2-м сервере, который импортирует файл .sql, заменяя существующую базу данных обновленными данными.
Все это работает …
Проблема в том, что независимо от того, какие изменения я делаю в конфигурации Apache, скрипт всегда выдает ошибку 503 через 30 секунд, каждый раз (между 30.02 и 30.04 секундами, если быть точным). Однако сценарий PHP продолжает выполняться и успешно завершает все операции, включая запись в файл журнала, в течение 60-61 секунды. В журналах Apache нет ничего, что ссылалось бы на какие-либо ошибки.
Я проверил все используемые файлы .conf, и ни один из них не упомянул 30-секундный тайм-аут. В моем httpd.conf я добавил эти строки:
TimeOut 300
ProxyTimeOut 300
KeepAlive On
KeepAliveTimeout 60
Я также установил max_execution_time и memory_limit в скрипте php на 120 и 2048M соответственно, чтобы исключить это во время тестирования.
На странице должно отображаться сообщение об успехе пользователю с отчетом о том, что было изменено / обновлено. Однако с ошибкой 503 я не могу этого сделать. Поэтому я хочу избавиться от этого ограничения 503, чтобы оно могло правильно отображать конечный результат синхронизации. не я тоже если честно, знакомы с конфигурацией Apache, поэтому любая помощь / идеи о том, что может вызвать это / где искать, будут много оценили!
Заранее спасибо!
Перепробовав много-много вещей, я смог выяснить, в чем заключалась конкретная причина. Оказывается, это было вызвано тайм-аутом прокси. Вот ссылка на ответ, который объяснил, что добавить в файл vhost conf.
Одним словом, вот ответ для будущих посетителей:
Для последних версий httpd и mod_proxy_fcgi вы можете просто добавить
timeout = до конца строки ProxyPassMatch, например:
ProxyPassMatch ^/(.+\.php.*)$ fcgi://127.0.0.1:9000/<docroot>/$1 timeout=1800
Для более старых версий это было немного сложнее,
например.:
<Proxy fcgi://127.0.0.1:9000>
ProxySet timeout=1800
</Proxy>
ProxyPassMatch ^/(.+\.php.*)$ fcgi://127.0.0.1:9000/<docroot>/$1
Не уверен, что вы попробовали это, но я думаю, что вам, возможно, придется настроить max_execution_time
в php.ini, который использует Apache. Во многих дистрибутивах по умолчанию 30.
http://php.net/manual/en/info.configuration.php#ini.max-execution-time