将Node.js页面部署到AWS Elastic Beanstalk

时间:2018-11-27 22:10:23

标签: node.js amazon-web-services nginx fs amazon-elastic-beanstalk

我最近将我的第一个Node.js应用程序部署到了AWS Elastic Beanstalk。这是一个非常简单的投资组合页面。该站点正常工作了几个小时,但随后实例变为“严重”状态,页面返回了以下消息:

502错误的网关 nginx / 1.12.1

日志中的错误消息是“第一个参数必须是字符串或缓冲区”。

我重新启动了应用服务器,该页面正常工作了12个小时,但是随后又出现了相同的消息,导致它再次掉线。因此,我开始进行故障排除并尝试了以下方法:

Elastic Beanstalk中的Node.js版本不同于用于创建我的应用程序的版本,因此我将其更改为使用(8.12.0)创建站点的相同版本。重新启动应用服务器。同样的问题。

我认为负载均衡器可能无法读取响应,因此我开始将响应中发送的数据转换为字符串(.toString()),但这没有帮助。事实证明,我的配置甚至没有负载均衡器。

fs.readFile的Node文档说,readFile方法使用大量内存,并考虑改用readStream,因此我进行了更改,但使用readStream获得相同的结果。

我重建了环境,然后重试。这次页面成功运行了两天。然后两天后,它再次错误并显示以下消息:

错误:ENOENT:没有这样的文件或目录,请打开“ public // hell.php” events.js:183       投掷者//未处理的“错误”事件       ^

我不使用任何php代码。为什么它引用了一个名为“ hell”的php文件?

这是我在server.js文件中的代码:

const http = require("http");
const fs = require("fs");
//use AWS's default port, or if it's not available, use port 8081.
const port = process.env.PORT || 8081;
const server = http.createServer(function (req, res) {

    res.statusCode = 200;

    if (req.url == "/" || req.url == "/index.html" || req.url == "/home") {
        let readStream = fs.createReadStream("public/index.html");

        // When the stream is done being read, end the response
        readStream.on('close', () => {
            res.end();
        })

        // Stream chunks to response
        readStream.pipe(res);
    }
    else {
        let readStream = fs.createReadStream("public/" + req.url);

        // When the stream is done being read, end the response
        readStream.on('close', () => {
            res.end();
        })

        // Stream chunks to response
        readStream.pipe(res);
    }
}).listen(port);

由fs读取的“ public / index.html”文件的副本位于: https://zurafuse.github.io/index.html

有人知道我在做什么错吗?

1 个答案:

答案 0 :(得分:0)

我已经解决了这个问题。事实证明,僵尸程序经常像我的一样在AWS网站上寻找漏洞,而就我而言,他们试图打开不存在的页面(如Wordpress页面)。因此,我将代码修改为仅打开已定义的现有页面,并且如果有任何HTTP请求提出了意外要求,我将返回“找不到页面”响应。从那以后我就没有问题。

由于我的网站在尝试打开不存在的页面时不断出错,因此使我的AWS Elastic Beanstalk实例崩溃。而且由于我有免费版本,因此它根本无法扩展,因此也不太宽容。