更新:唯一の問題は、8000ではなく一部のポートをブロックするファイアウォールの背後にいることでした。
編集:TL; DR:ポート9000にリモートで接続することはできませんが、ポート8000は問題なく、理由はわかりません:(
このnode.jsアプリケーションはポート8000で実行されており、別のアプリケーション(http-proxy)はポート9000で実行されています。
自分のマシンで実行することは問題ありませんが、サーバーに配置すると問題が発生します(EC2インスタンス-Webコンソールセキュリティグループ[1]のポートを開きました)。アプリケーションは正常に動作しますが、外部からプロキシに接続できません。サーバーで試してみたところ$ telnet localhost 9000
、接続されているので、それは良い兆候だと思います。
私が気付いたもう1つのことは、アプリケーションを個別に実行しようとすると、同じ結果が得られることです。つまり、8000-OK、9000-NOTOK:<です。ただし、プロキシが使用するポートを9000から8000に変更すると、機能します。また、ポート、つまりapplication:9000とproxy:8000を切り替えると、プロキシに接続できますが、アプリケーションには接続できません。他の番号も試しましたが、それでも直りません。
アプリケーション自体とは関係がなく、私が行方不明になっている本当に愚かなことがあると思いますが、私はそれに指を置くことができないので、このセットアップが機能しない理由を誰かが知っていますか?
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
セキュリティグループのルール