AWS Elastic Beanstalk / NodeJS / Nginx 错误:不断收到 502 bad gateway
Posted
技术标签:
【中文标题】AWS Elastic Beanstalk / NodeJS / Nginx 错误:不断收到 502 bad gateway【英文标题】:AWS Elastic Beanstalk / NodeJS / Nginx Error: Keep getting 502 bad gateway 【发布时间】:2019-03-25 10:47:09 【问题描述】:我已经多次部署了我的网络应用程序,并且运行良好。
但自昨天部署以来,每当我尝试获取我的网站时,我都会不断收到 502 Bad Gateway。
我从 AWS elastic beanstalk 中终止了我的应用程序并重新创建,但仍然收到 502 bad gateway。
这是我的 nodejs.log:
Error: ENOENT: no such file or directory, open '/var/app/current/config/awsconfig.json'
at Error (native)
at Object.fs.openSync (fs.js:642:18)
at Object.fs.readFileSync (fs.js:510:33)
at Object.readFileSync (/var/app/current/node_modules/aws-sdk/lib/util.js:97:26)
at Config.loadFromPath (/var/app/current/node_modules/aws-sdk/lib/config.js:409:39)
at Object.<anonymous> (/var/app/current/server.js:14:12)
at Module._compile (module.js:577:32)
at Object.Module._extensions..js (module.js:586:10)
at Module.load (module.js:494:32)
at tryModuleLoad (module.js:453:12)
fs.js:642
return binding.open(pathModule._makeLong(path), stringToFlags(flags), mode);
这是我 server.js 中与 nodejs 错误日志相关的部分:
const express = require("express");
const path = require("path");
const fs = require("fs");
const template = require("./public/template");
const bodyParser = require("body-parser");
const _ = require("lodash");
const uuidv1 = require("uuid/v1");
const AWS = require("aws-sdk");
const multer = require("multer");
const multerS3 = require("multer-s3");
// Image Upload
AWS.config.loadFromPath(path.join(__dirname, "/config/awsconfig.json"));
const s3 = new AWS.S3();
const upload = multer(
storage: multerS3(
s3,
bucket: "hackingdeal",
key: (req, file, cb) =>
cb(null, new Date().valueOf() + path.extname(file.originalname));
,
acl: "public-read-write"
)
);
仅供参考,“server.js”文件位于根目录(“./server.js”),awsconfig.json 位于“./config/awsconfig.json”
我创建了一个 .gitignore 来忽略“config/awsconfig.json”。 我还创建了一个 .ebignore,但我没有包含“config/awsconfig.json”,因此我的弹性 beanstalk 可以找到并读取“config/awsconfig.json”文件。
这是我的 nginx/error.log:
2018/10/20 23:32:05 [error] 8103#0: *96 connect() failed (111: Connection refused) while connecting to upstream, client: 110.12.50.169, server: , request: "GET / HTTP/1.1", upstream: "http://127.0.0.1:8081/", host: "hackingdeal-env.4wgwkb9tdv.ap-northeast-2.elasticbeanstalk.com"
2018/10/20 23:32:05 [error] 8103#0: *96 connect() failed (111: Connection refused) while connecting to upstream, client: 110.12.50.169, server: , request: "GET /favicon.ico HTTP/1.1", upstream: "http://127.0.0.1:8081/favicon.ico", host: "hackingdeal-env.4wgwkb9tdv.ap-northeast-2.elasticbeanstalk.com", referrer: "http://hackingdeal-env.4wgwkb9tdv.ap-northeast-2.elasticbeanstalk.com/"
2018/10/20 23:48:00 [error] 12936#0: *1 connect() failed (111: Connection refused) while connecting to upstream, client: 110.12.50.169, server: , request: "GET / HTTP/1.1", upstream: "http://127.0.0.1:8081/", host: "hackingdeal.com"
2018/10/20 23:48:01 [error] 12936#0: *1 connect() failed (111: Connection refused) while connecting to upstream, client: 110.12.50.169, server: , request: "GET /favicon.ico HTTP/1.1", upstream: "http://127.0.0.1:8081/favicon.ico", host: "hackingdeal.com", referrer: "http://hackingdeal.com/"
hackingdeal.com 是我的网站。我使用 Route53 服务将该域连接到我的 Elastic Beanstalk,并设置了别名。
问题是, 我的应用程序在 localhost 上成功运行。
当我使用图像上传语句部署“server.js”后,我的应用程序立即成功运行(使用 AWS S3 和 multer/multerS3 的东西:参见上面的代码块”
但从昨天开始,它一直返回 502 bad gateway。
我完全迷失了,我不知道从哪里开始,或者在哪里找到我的问题。 请帮忙..
【问题讨论】:
【参考方案1】:我必须阅读日志才能更好地了解您的问题,但您似乎尝试从此处的文件 /config/awsconfig.json
加载配置
// Image Upload
AWS.config.loadFromPath(path.join(__dirname, "/config/awsconfig.json"));
const s3 = new AWS.S3();
const upload = multer(
storage: multerS3(
s3,
bucket: "hackingdeal",
key: (req, file, cb) =>
cb(null, new Date().valueOf() + path.extname(file.originalname));
,
acl: "public-read-write"
)
);
因此,您必须将此文件上传到您的 ELB。其实这就是nodejs.log
登录的问题
【讨论】:
我的目录中实际上有 /config/awsconfig.json,我没有在 .ebignore 中忽略它。那么为什么我的 eb 部署忽略了我的 config/awsconfig.json 而没有上传呢?无论如何我可以手动上传文件吗?或者至少检查文件是否存在于弹性豆茎上? 是的,有!您必须通过 ssh 连接到您的 EC2 实例(请参阅console.aws.amazon.com/ec2 中的内容以及如何连接)并检查该文件是否存在。我很确定它没有被上传到您的 ELB 包中,您必须检查原因。询问您是否需要更多信息! 我检查了一下,awsconfig.json 已经在我的 eb ec2 实例上。我又迷路了.. 您是说 '/var/app/current/config/awsconfig.json' 存在并且存在于 ELB 的 EC2 上?那么 nodejs.log 是不是在撒谎呢? xD以上是关于AWS Elastic Beanstalk / NodeJS / Nginx 错误:不断收到 502 bad gateway的主要内容,如果未能解决你的问题,请参考以下文章
将 AWS 颁发的证书用于单实例 Elastic Beanstalk 应用程序
为 Rails 应用程序创建 AWS Elastic Beanstalk 环境时出错
配置 AWS Elastic Beanstalk Nginx 以使用 socket.io 连接的主要问题
AWS Elastic Beanstalk - PHP 脚本在部署新版本后无法执行
PHP AWS Elastic Beanstalk - 不能发布超过 2GB 的文件
Amazon Elastic BeanStalk 错误:无法创建 AWS Elastic Beanstalk 应用程序版本