服务器返回特定脚本的 http 504 错误代码

服务器返回特定脚本的 http 504 错误代码

我有 3 台服务器,全部设置相同,使用在 ubuntu 14.04 服务器上运行的 apache、mod_proxy_fcgi、php5-fpm 和 mysql/mariaDB galera 集群对单个站点进行负载平衡。除了一个页面外,大部分内容似乎都运行良好。我遇到问题的页面是上传和处理大型 csv 文件(7K 到 20K 行之间),然后将数据插入数据库。当网站在单个服务器上运行时,此页面运行良好,但 galera 集群同步其他两台服务器所需的额外时间似乎是问题的根本原因,因为它是一个同步更新,会获得并保持锁,直到所有 3 台服务器都更新完毕。这在任何其他页面上都不会被注意到,但在此脚本中返回了 504 错误,并且 apache 错误日志包含以下错误。

[proxy_fcgi:error] [pid 24235] [client 99.99.99.99:44197] AH01068: Got bogus version 1,referer: http://example.com/page.php
[proxy_fcgi:error] [pid 24235] (22)Invalid argument: [client 99.99.99.99:44197] AH01075: Error dispatching request to :, referer: http://example.com/page.php

99.99.99.99 ip 地址是服务器的实际 ip 地址,而不是客户端的 ip 地址,因此看起来 php-fpm 没有及时响应 proxy_fcgi(因为它正在等待 mysql),并且返回了超时。我尝试调整 apache 站点配置中的超时以及 php-fpm 的超时,但没有成功。

我的 apache 配置如下

<Proxy fcgi://127.0.0.1:9000>
    ProxySet timeout=1800
</Proxy>
ProxyPassMatch ^/(.*\.php(/.*)?)$ fcgi://127.0.0.1:9000/var/www/$1

也尝试过

ProxyPassMatch ^/(.*\.php(/.*)?)$ fcgi://127.0.0.1:9000/var/www/$1 connectiontimeout=300 timeout=300

我不想在后台处理上传,因为当我处理页面时,如果在 csv 文件中发现错误,我会使用 mysql row pk 来允许用户编辑信息并更正问题。我的用户更愿意等待这个页面,而不是稍后再回来检查其进度。

答案1

我在“Apache 2.4.10-1+deb.sury.org~trusty+1”上使用 MPM Event 时遇到了类似的问题。
切换(返回,就像在 Apache 2.2 中一样)到 MPM Worker 解决了这个问题:

a2dismod mpm_event && a2enmod mpm_worker && service apache restart

尝试一下(当然,当您在设置中使用 MPM 事件时)。

相关内容