【发布时间】: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