Google App Engine 502(网关错误),但使用 PHP 8.2 登录时为 200(正常)

问题描述 投票:0回答:1

我正在将 GCP 应用引擎从旧的 PHP5.5 迁移到 PHP8.2。 应用程序部署成功。当向 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

nginx google-cloud-platform google-app-engine logging php-8.2
1个回答
0
投票

已解决

我发现在脚本的实际输出之前的任何位置添加任何非空字符串(例如 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上的一个错误。

希望这可以帮助其他人

© www.soinside.com 2019 - 2024. All rights reserved.