繁体   English   中英

Azure 函数应用返回 502 错误网关

[英]Azure function app returning 502 Bad Gateway

当我在我们的主插槽上运行 HTTP 触发的函数应用程序时,我收到以下错误消息:

 Status: 502 Bad Gateway <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"/> <title>502 - Web server received an invalid response while acting as a gateway or proxy server.</title> <style type="text/css"> <!-- body{margin:0;font-size:.7em;font-family:Verdana, Arial, Helvetica, sans-serif;background:#EEEEEE;} fieldset{padding:0 15px 10px 15px;} h1{font-size:2.4em;margin:0;color:#FFF;} h2{font-size:1.7em;margin:0;color:#CC0000;} h3{font-size:1.2em;margin:10px 0 0 0;color:#000000;} #header{width:96%;margin:0 0 0 0;padding:6px 2% 6px 2%;font-family:"trebuchet MS", Verdana, sans-serif;color:#FFF; background-color:#555555;} #content{margin:0 0 0 2%;position:relative;} .content-container{background:#FFF;width:96%;margin-top:8px;padding:10px;position:relative;} --> </style> </head> <body> <div id="header"><h1>Server Error</h1></div> <div id="content"> <div class="content-container"><fieldset> <h2>502 - Web server received an invalid response while acting as a gateway or proxy server.</h2> <h3>There is a problem with the page you are looking for, and it cannot be displayed. When the Web server (while acting as a gateway or proxy) contacted the upstream content server, it received an invalid response from the content server.</h3> </fieldset></div> </div> </body> </html>

但是当我尝试使用完全相同的代码创建一个新的插槽和函数应用程序时,它运行良好而不会出现上述错误。 我们的主插槽的配置似乎有问题,但我找不到任何资源来指向它。

有没有其他人遇到过这个问题? 你怎么修好它的?

当我将对象从 MongoDB(通过 Mongoose 方法:Model.find())直接发送到响应时,我遇到了这个问题。

          Claim.find()
            .then(claims => {
                context.res = {
                    status: 200,
                    headers: {
                        'Content-Type': 'application/json',
                        'Access-Control-Allow-Origin': '*'
                    },
                    body: claims
                };
                context.done();
            })

我必须将此主体对象更改为:

          Claim.find()
            .then(claims => {
                context.res = {
                    status: 200,
                    headers: {
                        'Content-Type': 'application/json',
                        'Access-Control-Allow-Origin': '*'
                    },
                    body: JSON.parse(JSON.stringify(claims))
                };
                context.done();
            })

我在不同情况下多次看到 502 错误。
大多数时候是我的编程错误/配置问题。
但是今天发现这个问题花了很多时间,所以在这里分享。

问题 #1

s3 = new AWS.S3();
AWS.config.loadFromPath(dirName1 + '\\aws-config.json');
s3.listObjectsV2(..);

在这里,虽然错误在第 1 行,但问题发生在第 3 行

解决办法是:

AWS.config.loadFromPath(dirName1 + '\\aws-config.json');
s3 = new AWS.S3();
s3.listObjectsV2(..);

也就是说,加载 aws 配置后,我们需要创建 s3 新实例变量。

问题#2

正如这里给出的, https://stackoverflow.com/a/39240447/984471 ,是关于将文件写入无法访问的目录,而您可以写入 D:\\local\\Temp,我们不能写入其他目录,例如当前目录或 D:\\

不幸的是,在上面的例子和我的其他例子中,Azure 函数存在而没有任何登录 azure 函数控制台,因此需要进行大量调试。

我也遇到了同样的错误。 我在事件处理函数的末尾写了“context.done(null,output)”,它工作正常。

就我而言,它是缺少WEBSITE_NODE_DEFAULT_VERSION应用程序设置(Node.js Windows 功能应用程序,高级和消费托管计划中均发生错误)。

如果您在 Azure 门户中创建函数应用程序,应用程序设置会自动设置,但如果您使用 IaC 工具(在我的情况下为 Terraform),则需要明确设置它。

"WEBSITE_NODE_DEFAULT_VERSION" = "~14"

我有同样的错误,我只是忘记添加“内容类型”标题“应用程序/json”。 添加标题后,它对我来说很好用

如果您收到 502:s 甚至缺少应用程序洞察日志条目...

健全性检查:您是否部署了您的应用程序?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM