nginx Google App Engine 502(Bad Gateway),但PHP 8.2的日志中有200(OK)

irlmq6kh  于 12个月前  发布在  Nginx
关注(0)|答案(1)|浏览(165)

我正在将一个GCP应用引擎从旧的PHP5.5迁移到PHP8.2。应用部署通过OK。当向GAE发送请求时,我总是收到HTTP/1.1 502 Bad Gateway错误,但根据日志,它是200 OK。因此添加ini_set('display_errors', 1); error_reporting(E_ALL);并不提供任何信息。它实际上没有改变任何东西,表明没有PHP错误。

  • GCP上的502似乎通常是由于内存问题,但在我的情况下,日志没有报告这一点。
  • 我在提供的日志中发出了两个请求,第一个是启动示例(799毫秒),第二个(25毫秒)是确认示例仍然在运行,这意味着它没有崩溃,GAE没有终止应用程序。
  • 请求完成得相当快,所以这似乎不是计算长度问题。
  • 多次尝试已经完成了多个小时,所以它似乎不是一个时间问题。

我不明白为什么它这样做,以及如何调试它,因为我有不连贯的日志。
这里是我的app.yaml:

runtime: php82
app_engine_apis: true
entrypoint: serve --enable-dynamic-workers front-controller.php
handlers:
    ... some handlers
env_variables:
    ... some variables

字符串
下面是回应:

HTTP/1.1 502 Bad Gateway
alt-svc: h3=":443"; ma=2592000,h3-29=":443"; ma=2592000
connection: close
content-length: 332
content-type: text/html; charset=UTF-8
date: Fri, 22 Dec 2023 12:43:33 GMT
referrer-policy: no-referrer

<html><head>
<meta http-equiv="content-type" content="text/html;charset=utf-8">
<title>502 Server Error</title>
</head>
<body text=#000000 bgcolor=#ffffff>
<h1>Error: Server Error</h1>
<h2>The server encountered a temporary error and could not complete your request.<p>Please try again in 30 seconds.</h2>
<h2></h2>
</body></html>


Here a screenshot of the logs, in GCP Logs Explorer, showing two requests with success http 200 and no error

rjzwgtxy

rjzwgtxy1#

解决
我发现在脚本的实际输出之前添加任何非空字符串(如var_dump或只是echo““)使请求成功(HTTP 200),具有预期的输出,前面是回显的字符串,但没有错误。我的脚本是一个API,所以它构建请求的答案,然后调用一个设置json头并回显输出的函数。因此,我认为这一定是一个与头相关的问题(因为回显任何东西都会阻止进一步的头设置,即使我没有得到与此相关的常见错误)
我一个接一个地评论每一行,直到我发现这样愚蠢的事情:
在PHP8.2 AppEngine Gen-2上的先前设置(PHP5.5 AppEngine Gen-1)中设置json和utf8头文件似乎是多余的,它在记录200 OK时生成502错误响应。
所以我只是删除了'charset=utf-8'头,现在它工作得很好。
无论如何,我仍然认为输出和日志的不匹配是GAE上的一个bug。
希望这能帮助其他人

相关问题