【问题标题】:EC2 hosted Node.js application - can't remotely connect to portEC2 托管的 Node.js 应用程序 - 无法远程连接到端口
【发布时间】:2012-12-26 15:35:00
【问题描述】:

更新:原来唯一的问题是我在防火墙后面阻止了一些端口,但不是 8000。


编辑:TL;DR: 无法远程连接到端口 9000,但是端口 8000 可以,我不知道为什么 :(


我有这个 node.js 应用程序在端口 8000 上运行,另一个 (http-proxy) 在端口 9000 上运行。

在我的机器上运行它们很好,但是当我将它们放在服务器上时遇到了一些问题(EC2 实例 - 我确实在 Web 控制台安全组中打开了端口[ 1])。该应用程序运行良好,但我无法从外部连接到代理。我尝试在服务器上$ telnet localhost 9000 并连接,所以我想这是一个好兆头。

我注意到的另一件事是,如果我尝试单独运行应用程序,我会得到相同的结果,即:8000 - OK,9000 - NOTOK :

我猜有些东西真的很愚蠢,与应用程序本身无关,我错过了,但我不能指望它,所以有人知道为什么这个设置不起作用吗?

server.js

var express = require('express.io');
var app = module.exports = express();

require('./proxy');

app.http().io();
app.listen(8000);
// ...

proxy.js

var httpProxy = require('http-proxy');
var url = require('url');

httpProxy.createServer(function(req, res, proxy) {

    // ... 
    proxy.proxyRequest(req, res, {
        host: destination.host,
        port: 80
    });

}).listen(9000);

$ netstat -pln | grep node 输出

tcp   0      0      0.0.0.0:9000    0.0.0.0:*       LISTEN  1487/node
tcp   0      0      0.0.0.0:8000    0.0.0.0:*       LISTEN  1487/node

安全组规则

【问题讨论】:

  • 您是否将您的 ec2 实例配置为开放端口 9000?
  • @sheldonk 是的,我做到了,而且我很确定(不过,我不确定如何在这里展示它)。目前,我已经iptables -F'd 并且一切正常......
  • 您还需要确保您的 EC2 安全组中的端口 9000 已打开 - 我认为这是在第一次启动实例之前必须发生的事情,但不确定。
  • @Joe 是的,端口 9000 在安全组中打开(我在问题中添加了屏幕截图)。至于第一次上线前需要设置的规则,好像不是这样:security groups docs.
  • 你可以使用nginx作为反向代理和上游你的应用程序。

标签: node.js proxy amazon-ec2 node-http-proxy


【解决方案1】:

原来问题与应用程序或 EC2 实例设置无关。

测试时我所在的网络阻塞了一些端口。这就是为什么将代理移动到端口 8000 时它工作正常,但在 9000 或我尝试过的任何其他随机端口上却没有。哦!

【讨论】:

    猜你喜欢
    • 2018-12-21
    • 1970-01-01
    • 2020-09-04
    • 1970-01-01
    • 2018-12-27
    • 2012-08-12
    • 1970-01-01
    • 2019-05-28
    • 2020-08-24
    相关资源
    最近更新 更多