简体   繁体   English

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

[英]Azure function app returning 502 Bad Gateway

I am getting the error message below when I run a HTTP Triggered function app on our main slot :当我在我们的主插槽上运行 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>

But when I tried to create a new slot and function app with the same exact code, it works fine without getting the error above.但是当我尝试使用完全相同的代码创建一个新的插槽和函数应用程序时,它运行良好而不会出现上述错误。 It seems like there's an issue with our main slot's configuration but I just can't find any resource to point me to it.我们的主插槽的配置似乎有问题,但我找不到任何资源来指向它。

Has anyone else encountered this problem?有没有其他人遇到过这个问题? How did you fix it?你怎么修好它的?

I have this problem when I sent object from MongoDB (by Mongoose method: Model.find()) directly to the response.当我将对象从 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();
            })

I must change this body object to:我必须将此主体对象更改为:

          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();
            })

I have seen 502 error many times in different situations.我在不同情况下多次看到 502 错误。
Most times it is my programming mistake/ config issue.大多数时候是我的编程错误/配置问题。
But today it took a lot more time to find this issue, so sharing here.但是今天发现这个问题花了很多时间,所以在这里分享。

Issue #1问题 #1

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

Here, though the error is at line 1, the issue happens at line 3在这里,虽然错误在第 1 行,但问题发生在第 3 行

Solution is:解决办法是:

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

That is, after loading the aws config, we need to create s3 new instance variable.也就是说,加载 aws 配置后,我们需要创建 s3 新实例变量。

Issue #2问题#2

As given here, https://stackoverflow.com/a/39240447/984471 , is about writing file to un-accessible directory, while you can write to D:\\local\\Temp, we can't write other directories like current directory or D:\\正如这里给出的, https://stackoverflow.com/a/39240447/984471 ,是关于将文件写入无法访问的目录,而您可以写入 D:\\local\\Temp,我们不能写入其他目录,例如当前目录或 D:\\

Unfortunately, in the above examples and also other instances I had, the Azure function exists without any log in azure function console, so there is need for a lot debugging required.不幸的是,在上面的例子和我的其他例子中,Azure 函数存在而没有任何登录 azure 函数控制台,因此需要进行大量调试。

I was also getting the same error.我也遇到了同样的错误。 I wrote " context.done(null,output)" at the end of event handler function and it is working fine.我在事件处理函数的末尾写了“context.done(null,output)”,它工作正常。

In my case it was a missing WEBSITE_NODE_DEFAULT_VERSION application setting (Node.js Windows function app, error occurs in both Premium and Consumption hosting plans).就我而言,它是缺少WEBSITE_NODE_DEFAULT_VERSION应用程序设置(Node.js Windows 功能应用程序,高级和消费托管计划中均发生错误)。

The app setting is set automatically if you create a function app in Azure Portal, but you need to set it explicitly if you use an IaC tool (Terraform in my case).如果您在 Azure 门户中创建函数应用程序,应用程序设置会自动设置,但如果您使用 IaC 工具(在我的情况下为 Terraform),则需要明确设置它。

"WEBSITE_NODE_DEFAULT_VERSION" = "~14"

I had the same error and i simply forgot to add the "Content-Type" Header "application/json".我有同样的错误,我只是忘记添加“内容类型”标题“应用程序/json”。 After adding the header it works fine for me添加标题后,它对我来说很好用

If you get 502:s and even lack application insights log entries...如果您收到 502:s 甚至缺少应用程序洞察日志条目...

Sanity check: Have you deployed your application?健全性检查:您是否部署了您的应用程序?

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

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