PHP/MySQL File/Database 同步的神秘 503 错误

Mysterious 503 Error with PHP/MySQL File/Database Sync

希望大家能帮帮我。我花了大约 7 个小时试图找到答案,到目前为止已经尝试了很多东西。

我有一个 PHP 脚本,用于在 2 个服务器之间同步 files/database 数据。在你们问这个过程对于这个项目来说是必要的并且必须保持原样之前。

该脚本基本上会找到一个目录中在过去 72 小时内发生更改的所有文件,并将它们通过 SFTP 传输到另一台服务器,替换所需的任何文件。然后它创建一个备份数据库的副本,删除某些 tables/rows,更改其他的并导出一个 .sql 文件。然后它通过 SFTP 将这个 .sql 文件发送到另一台服务器,并在第二台服务器上的文件上调用 include,该文件导入 .sql 文件,用更新的数据替换现有数据库。

所有这些都有效...

问题是,无论我对 Apache 配置进行何种更改,脚本每次都会在 30 秒后(准确地说是在 30.02 到 30.04 秒之间)给我一个 503 错误。但是,PHP 脚本继续 运行 并在大约 60-61 秒内成功完成所有操作,包括写入日志文件。 Apache 日志中也没有任何引用任何类型的错误。

我检查了所有使用的 .conf 文件,其中 none 提到了 30 秒超时。在我的 httpd.conf 中,我添加了这些行:

TimeOut 300
ProxyTimeOut 300
KeepAlive On
KeepAliveTimeout 60

我还在 php 脚本中将 max_execution_time 和 memory_limit 分别设置为 120 和 2048M,以确保在测试期间排除这种情况。

该页面应该向用户显示一条成功消息,并报告 changed/updated。但是,由于 503 错误,我无法执行此操作。所以我希望摆脱这个 503 限制,以便它可以正确显示同步的最终结果。老实说,我 不熟悉 Apache 配置,所以任何 help/ideas 导致 this/where 看起来的东西都是 much 赞赏!

提前致谢!

不确定您是否尝试过此操作,但我认为您可能需要调整 Apache 使用的 php.ini 中的 max_execution_time。在许多发行版中,它默认为 30。

http://php.net/manual/en/info.configuration.php#ini.max-execution-time

在尝试了很多很多之后,我终于找到了具体的原因。事实证明这是由代理超时引起的。 Here is a link to the answer that explained what to add to the vhost conf file.

简而言之,这是给未来访客的答案:

For the latest versions of httpd and mod_proxy_fcgi you can simply add timeout= to the end of the ProxyPassMatch line, e.g.:

ProxyPassMatch ^/(.+\.php.*)$ fcgi://127.0.0.1:9000/<docroot>/ timeout=1800

For older versions it was a little more complicated, e.g.:

<Proxy fcgi://127.0.0.1:9000>
  ProxySet timeout=1800
</Proxy>
ProxyPassMatch ^/(.+\.php.*)$ fcgi://127.0.0.1:9000/<docroot>/