更新:原来唯一的问题是我在防火墙后面阻止了一些端口,但不是 8000。
编辑:TL;DR:无法远程连接到端口 9000,但端口 8000 没问题,我不知道为什么 :(
我有这个 node.js 应用程序在端口8000上运行,另一个(http-proxy)在端口9000上运行。
在我的机器上运行它们很好,但是当我将它们放在服务器上时我遇到了一些问题(EC2实例 - 我确实在 Web 控制台安全组[1]中打开了端口)。该应用程序运行良好,但我无法从外部连接到代理。我试图$ telnet localhost 9000
在服务器上连接,所以我想这是一个好兆头。
我注意到的另一件事是,如果我尝试单独运行应用程序,我会得到相同的结果,即:8000 - OK,9000 - NOTOK :<。但是,如果我将代理使用的端口从 9000 更改为 8000,它就可以工作。如果我切换端口,即应用程序:9000 和代理:8000,我可以连接到代理,但不能连接到应用程序。我也尝试过其他数字,但这也无法解决。
我想有一些非常愚蠢的东西与应用程序本身无关并且我错过了,但我不能指望它,所以有人知道为什么这个设置不起作用吗?
服务器.js
var express = require('express.io');
var app = module.exports = express();
require('./proxy');
app.http().io();
app.listen(8000);
// ...
代理.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
安全组规则