504网关超时3分钟后(Docker中的Apache)

k3fezbri  于 7个月前  发布在  Apache
关注(0)|答案(3)|浏览(85)

我在一个Laravel项目上工作,该项目托管在一个带有Apache的Docker容器中。我有一个脚本,调用一个API,它可能需要超过3分钟的时间来响应,但我得到这个超时错误每次3分钟后:
504网关超时
我尝试在default.conf文件中将Apache Timeout增加到600(默认值为300),并将max_execution_timemax_input_time等php超时设置为600。
谁知道这三分钟的暂停是从哪里来的?
谢谢

lvmkulzt

lvmkulzt1#

PHP + Laravel有时候有点麻烦。

  • 首先检查几次花费不到1分钟的情况(针对阻塞请求场景)。
  • 然后检查“local”/“docker build”php config(默认超时)。
  • 检查Laravel的默认超时(有时框架的超时时间比Apache的短)。
  • 如果你有代理的话,检查一下尤里基的建议。

我不知道这是否是你的情况,但是如果你的文件非常大,在某个时候PHP可能会耗尽内存,所以如果你仍然有问题,也检查PHP的内存限制。
我希望这对你有帮助!

byqmnocz

byqmnocz2#

在我的例子中,默认的php-fpm代理超时在apache配置中被设置为60秒。将这个值从60更改为更大的值以及更改PHP端的max_execution_time解决了这个问题。

In file: /opt/docker/etc/httpd/conf.d/10-php.conf
   8: <Proxy fcgi://php-fpm:9000>
   9:   ProxySet connectiontimeout=5 timeout=60
    : </Proxy>
mefy6pfw

mefy6pfw3#

我有一个调用API的脚本
API在哪里?你的基础设施?去别的地方?调用脚本在哪里运行(在服务器/php上,在浏览器/JavaScript中,还是其他地方?)
这不是API,因为当我直接调用它时,即使在3分钟后也没有超时错误。
为什么你没有从代码的行为中知道这一点呢?
504网关超时
什么人举报的?你的基础设施?API?
我尝试将Apache的PHP增加到600(默认值为300)
你知道一分钟有60秒,所以“300”是3分钟多吗?你可能没有意识到大多数浏览器的超时时间是5分钟,所以使用更高的值在这里没有帮助。
谁知道这三分钟的暂停是从哪里来的?
应用大量的猜测,它可能是default_socket_timeout(除非显式设置,否则其值为60秒)或max_execution_time(除非显式设置,否则为30秒)。
但暂停是有原因的。如果某个任务预计需要超过30秒才能完成,那么您不应该在HTTP中从页面请求同步调用它。

相关问题