【问题标题】:IIS/ Node server issue on port 80 of EC2 instanceEC2 实例的端口 80 上的 IIS/节点服务器问题
【发布时间】:2016-04-17 16:10:41
【问题描述】:

在服务器配置之后,我有一个 IIS 服务器在我的 EC2 实例的端口 80 上进行监听。我可以从我的弹性 IP 访问它。 但我关闭了 IIS 服务器,希望在端口 80 上启动我的节点服务器。

现在,两者都不起作用!我的节点应用程序侦听端口 80,但无法通过弹性 IP 从外部访问。 我试图在 IIS 管理器中启动 IIS 服务器,它看起来像打开了。但它无法在实例内部(使用私有 IP)或从外部访问。

我能做些什么来解决它?

谢谢

服务器.js

/*******************************************************************************************/
/*CREATE AND START SERVER*/
/*******************************************************************************************/
var fs = require('fs');
var html = fs.readFileSync('./public/index.html');
var server=http.createServer(function(req,res){

    //res.write(html); // load the single view file (angular will handle the page changes on the front-end)
    //res.end();
    // application -------------------------------------------------------------
    app.get('*', function(req, res) {
        res.sendfile('./public/index.html'); // load the single view file (angular will handle the page changes on the front-end)
    });

});

server.listen(80,'localhost');

【问题讨论】:

  • 您是否尝试通过公共/弹性 IP 或私有 IP 上的 ssh 访问服务器?此外,就架构而言,IIS 和 Node 有点跨越了很多线路。我显然会建议将来运行一个或另一个,但听起来你可能有两件事在端口 80 上启动一个侦听器。与“不工作/运行”相反,你是否尝试过完全卸载 Node?​​span>
  • 我无法通过 telnet 建立连接。我一直在使用 RDP。
  • 我只想运行 Node 服务器。我使用 IIS 服务器只是为了测试端口 80。我不需要它。

标签: node.js amazon-web-services express amazon-ec2 aws-ec2


【解决方案1】:

我建议使用相同的密钥对和安全组启动一个新实例。然后将弹性 IP 移到新实例上。

启动 Node JS 假设 AWS Linux AMI

sudo yum update
sudo yum upgrade
sudo yum install gcc
yum groupinstall "Development tools"
wget -c https://nodejs.org/dist/v5.2.0/node-v5.2.0.tar.gz
#This is to download the source code.
tar -xzf node-v$ver.tar.gz
cd node-v$ver
./configure && make && sudo make install

然后你的 app.js

var port = process.env.PORT || 80,
    http = require('http'),
    fs = require('fs'),
    html = fs.readFileSync('index.html');
var index = require('./index');

var server = http.createServer(function (req, res) {
    console.log(req.method + "sdf " + req.url + res);
    if (req.method === 'POST') {
        var body = '';

        req.on('data', function(chunk) {
            body += chunk;
        });

        req.on('end', function () {
            res.writeHead(200, 'OK', {'Content-Type': 'text/plain'});
            res.write (html);
            res.end();
        });
    } else {
        res.writeHead(200);
        res.write(html);
        res.end();
    }
});

server.listen(port);
console.log('Server running at http://127.0.0.1:' + port + '/');

还有你的 index.html

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title></title>
    </head>
    <body>
        <p>Hello</p>
    </body>
</html>

这只是一个非常简单的 Node JS 实例

要获得更强大的设置,我建议您前往 EBS 并启动他们的一个示例。这要容易得多。

希望对你有帮助

更新

问题:用户试图创建http 监听端口 80 的服务器并运行 express 格式

解决方案:使用 其中一个 http 监听端口或 express - 两者同时不允许程序运行

【讨论】:

  • 是的,对我来说看起来很正常,它有效吗?您使用的是 EC2 还是 EBS?我看看能不能给你写一篇短文
  • 另外,您使用的是 Mac 还是 PC?只是出于好奇。这两个平台显然都非常有能力,但如果你使用的是 Mac,我强烈推荐一个名为 CodeRunner2 的程序。它可以运行您的 Node JS 代码来创建侦听端口的本地主机,以便您可以在浏览器中对其进行测试。它可能是我用过的最好的整体开发程序——一整天都用它。如果你使用 PC,我相信你可以用类似的方式做到这一点,但我只使用 Mac 和 Ubuntu。有时在本地机器上运行这些东西会更容易理解。
  • 知道了,听起来您的服务器实际上是在正确的端口上运行。我注意到您正在指定 Express 的文件夹路径。您为什么不尝试将其限制为 ('express'),您是否尝试过 express 生成器模块?
  • 首先,我使用应用程序生成器来启动我的节点项目。真的很好用!!其次,在我的代码中添加一个 http 服务器后,我的应用程序不再加载到浏览器上。我用我用来启动我的 http 服务器的确切代码更新了帖子
  • 哦!是的,我在开始时也遇到了这个问题。表达或创建服务器,一个或另一个基本上。
【解决方案2】:

您仍然遇到我在the comments here 中描述的问题。

当你这样做时:

server.listen(80,'localhost')

您正在告诉服务器侦听 来自 localhost 的请求,这意味着您明确忽略了所有外部请求。只需删除该参数即可监听来自所有地址的请求:

server.listen(80)

【讨论】:

  • 我的问题现在越来越奇怪了。我理解你的建议并做了同样的事情。现在可以从具有不同 IP(我使用私有 IP 和 127.0.0.0)的实例浏览器访问我侦听端口 80 的节点服务器。但它仍然不响应公共/弹性 IP。它给了我一个超时错误。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-07-08
  • 2013-02-19
  • 1970-01-01
  • 1970-01-01
  • 2020-07-09
  • 2021-02-19
  • 1970-01-01
相关资源
最近更新 更多