如何将Node HTTP/2服务器部署到Google App Engine



我在App Engine上有一个常规的Node(v12(http服务器。我用http2.createSecureServer切换到http2。它在开发中工作,但部署到应用程序引擎,在服务器成功启动后,它会用502坏网关响应请求。。。

我尝试切换到http2.createServer以不使用https,但请求从未收到响应(永远加载(。应用程序引擎日志浏览器中该请求的最后一次日志显示:

[error] 27#27: *2 upstream sent no valid HTTP/1.0 header 
while reading response header from upstream, client: 
169.254.1.1, server: _, request: "GET / HTTP/1.1", 
upstream: "http://127.0.0.1:8081/"

它似乎以某种方式期待http1,但我不知道为什么。我也不知道为什么它在8081端口上,我把端口设置为8080。

花了一天时间在谷歌和他们的文档中搜索关于使用http2和应用引擎的任何内容后,我筋疲力尽。他们的支持页面上写着";关于堆栈溢出的帖子";。。

main.js

const http2 = require('http2');
const fs = require('fs');
const app = new (require('koa'))();
const logger = require('koa-logger');
const bodyParser = require('koa-bodyparser');
const json = require('koa-json');
const cors = require('@koa/cors');
const router = require('./router.js');
const { PORT, HOST, KEY, CERT } = require('./config.js');
app.use(logger());
app.use(bodyParser());
app.use(json());
app.use(cors({ exposeHeaders: 'authorization' }));
app.use(router.routes());
app.use(router.allowedMethods());
const server = http2
.createSecureServer(
{
key: fs.readFileSync(KEY),
cert: fs.readFileSync(CERT),
allowHTTP1: true
},
app.callback()
)
.listen(PORT, () => {
console.log(`Koa HTTP/2 running at https://${HOST}:${PORT}`);
});

app.yaml

runtime: nodejs12
service: api
handlers:
- url: /.*
script: auto
secure: always
redirect_http_response_code: 301
vpc_access_connector:
name:
env_variables:
NODE_ENV: production
PORT:8080
KEY: key.pem
CERT: cert.pem
...

如果您想同时使用HTTP/2和应用程序引擎,您可以考虑在无服务器应用程序中使用负载平衡。谷歌应用程序引擎中的502错误可能涉及几种不同的可能性。

错误消息BAD_GATEWAY

消息中带有BAD_GATEWAY的错误代码502通常指示应用程序引擎由于内存不足而终止了应用程序。默认的应用程序引擎灵活虚拟机只有1GB的内存,应用程序容器只有600MB可用。

错误代码502或503

应用程序引擎可能需要几分钟才能成功响应请求。如果您发送了一个请求并返回了HTTP 502503或其他服务器错误,请等待一分钟,然后重试该请求。

最新更新