Apache 2.4 + mod_proxy Ubuntu 18.04 上 504 网关超时导致 70007

Apache 2.4 + mod_proxy Ubuntu 18.04 上 504 网关超时导致 70007

我厌倦了多次尝试使用 PHP-FPM 修复 Apache 2.4 中 mod_proxy 的 504 网关超时问题。所以我尝试在这里找到解决方案。实际上,我计划将软件从旧的 Apache 服务器迁移到新的 Ubuntu 18.04。20 GB MySQL 超过 3000 万个条目 98 个表,虽然不大,但有时很慢。

脚本正在运行,但耗时较长的操作(如用户、数据删除或数据库优化(5000 秒))以 504 结束。Apache 错误日志显示

[Fri Sep 20 22:08:44.426924 2019] [proxy_fcgi:error] [pid 9308] (70007)The timeout specified has expired: [client 87.xx.204.109:62982] AH01075: Error dispatching request to : (polling), referer: https://test.xxxx
[Fri Sep 20 22:14:05.539446 2019] [proxy_fcgi:error] [pid 9308] (70007)The timeout specified has expired: [client 87xx.204.109:62982] AH01075: Error dispatching request to : (polling), referer: https://test.xxxx
[Fri Sep 20 22:39:54.892255 2019] [proxy_fcgi:error] [pid 9273] (70007)The timeout specified has expired: [client 87.x.204.109:50931] AH01075: Error dispatching request to : (polling), referer: https://test.xxxx

第一个是设置max_execution_time为无限,但没有效果。第二个memory limit也是input time没有效果

我决定在 PHP-FPM 池中设置,request_terminate_timeout = 0但同样无效 [我知道这是标准]。也许我必须设置一个 proxy_timeout,但我的服务器管理系统 liveconfig 管理虚拟主机。我找到了 Ngix 的解决方案,但没有找到 apache 的解决方案。我还尝试了 mod_php,它适用于解决方案,所以我认为问题出在 mod_proxy 上,php 端没问题。

我该怎么做才能将 mod_proxy 的超时时间提高到 5000 以上

<IfModule mod_proxy_fcgi.c>
        <FilesMatch ".+\.ph(p[3457]?|t|tml|ps)$">
            SetHandler "proxy:unix:/var/run/php7.2-fpm/web0.sock|fcgi://localhost"
            SetEnvIfNoCase ^Authorization$ "(.+)" HTTP_AUTHORIZATION=$1
        </FilesMatch>
    </IfModule>

有人能帮我吗?我发现我可以使用超时

答案1

默认情况下,Apache 使用Timeout配置为60秒的指令。

要修改代理请求的超时时间,您必须使用ProxyTimeout

例如:

<IfModule mod_proxy.c>
    ProxyTimeout 180
</IfModule>

Apache 文档中的更多信息:https://httpd.apache.org/docs/2.4/en/mod/mod_proxy.html#proxytimeout

答案2

我遇到了类似的问题,在仔细阅读示例后,我找到了解决方案https://httpd.apache.org/docs/2.4/mod/mod_proxy_fcgi.html

特别是“通过处理程序代理”的示例很有帮助。

这应该将 mod_proxy 的超时设置为 '''超过 9000!!!'''

    <IfModule mod_proxy_fcgi.c>
       <FilesMatch ".+\.ph(p[3457]?|t|tml|ps)$">
            SetHandler "proxy:unix:/var/run/php7.2-fpm/web0.sock|fcgi://localhost"
            SetEnvIfNoCase ^Authorization$ "(.+)" HTTP_AUTHORIZATION=$1
        </FilesMatch>
        <Proxy "fcgi://localhost">
            ProxySet timeout=9001
        </Proxy>
    </IfModule>

来自上面的链接:

“与 SetHandler 匹配的部分是跟随管道的部分。”

该部件fcgi://localhost必须在SetHandler和内Proxy

答案3

相关内容