私の目的は、ポート80でNode.jsを実行することです。これは、他のポートからのトラフィックを許可しない特定のネットワークからnode.jsがブロックされていることを発見しているためです。
これを行う最良の方法は、Node.jsを介してApacheをプロキシすることであると思われます。 node-http-proxy を使用してこれを実行しようとしましたが、運がありません。
私が使用しているコードは次のとおりです。
var util = require('util'),
http = require('http'),
httpProxy = require('http-proxy');
httpProxy.createServer(9000, 'localhost').listen(80);
http.createServer(function (req, res) {
res.writeHead(200, { 'Content-Type': 'text/plain' });
res.write('request successfully proxied to: ' + req.url + '\n' + JSON.stringify(req.headers, true, 2));
res.end();
}).listen(9000);
しかし、ポート80で「使用中のアドレス」というエラーが表示され続けます。何か間違っているはずです。
Node-http-proxyを使用してnode.jsでApacheをプロキシするにはどうすればよいですか?これにより、node.jsをポート80で実行できますか?そして、node-http-proxyがこれを達成する最良の方法ですか?
ありがとうございました。
実行する必要があるのは、実行しているサーバーのIPが2つあることです。 Apacheにはポート80にバインドされた1つのIPがあり、node.jsにはポート80にバインドされたもう1つのIPがあります。
Nodeとそのlistenディレクティブの使用には、2つの値があります。 .listen(80、NODEJS_IPまたはDNS NAME);
その他のアドバイス。
イベントが発生しないため、nodejsでApacheを使用しません。したがって、これは実際には推奨されません。 Nodeとのより良いペアリングとして、NGINXの使用を実際に検討します。
ハイポート8080またはwhatevでアプリを実行します
Sudo iptables -A PREROUTING -t nat -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 8080
NgnixまたはApacheを使用していない場合
最も簡単な解決策:ノードアプリをポート80で実行するように安全に設定します。
Sudo apt-get install libcap2-bin
Sudo setcap cap_net_bind_service=+ep /path/to/node
なぜ私はそれが好きですか?
参照リンク: https://www.digitalocean.com/community/tutorials/how-to-use-pm2-to-setup-a-node-js-production-environment-on-an-an-ubuntu-vps (クラウドホスティングでノードアプリをセットアップする方法に関する優れた記事)。
ノードをルートとして実行する必要があるため、現在ポート80でノードを実行することはお勧めしません。
あなたはApacheにどのように執着していますか? nginxを介したノードのプロキシは、次のようなnginx-configを使用した実証済みのソリューションです。
upstream node_cluster {
ip_hash;
server 127.0.0.1:8000;
server 127.0.0.1:8001;
server 127.0.0.1:8002;
}
server {
listen 0.0.0.0:80;
server_name foo;
access_log /var/log/nginx/foo.log;
location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_Host;
proxy_pass http://node_cluster/;
proxy_redirect off;
}
}
Nginxのドキュメント:
コードは、ポート80からポート9000にノードベースのプロキシを作成し、ポート9000にノードベースのHTTPサーバーを作成するコード例のように見えます(つまり、Node:80 -> Node:9000
)
Apacheがすでにポート80を使用しているため、Nodeを起動すると「使用中のアドレス」を取得しています。Apacheをプロキシに使用する場合は、Node =別のポート(たとえば9000)で、Apacheがポート80でリッスンし、ポート9000でNodeに要求を転送します。つまり、Apache:80 -> Node:9000
)
使用しているライブラリは、逆を行うためのものであるようです。プロキシとしてNodeを使用し、Apacheにリクエストを転送します。この場合、ポート80以外のポートで実行するようにApacheを構成する必要があります。(つまりNode:80 -> Apache:9000
)。
Node:80 -> Apache:9000
または Apache:9000 -> Node:80
、 最終的には?
コメント後に編集:Apache:80 -> Node:9000
、使用できますmod_proxy
ApacheでProxyPass
/ProxyPassReverse
ディレクティブを使用します。
ProxyPass /nodeurls/ http://localhost:9000/
ProxyPassReverse /nodeurls/ http://localhost:9000/
ここで、nodeurls
は、ApacheがNodeに転送するURLのファミリーです。
私は同じ問題を抱えていましたが、ここでnode-http-proxyを使用してポート80でリッスンし、エクスプレスまたはApacheに転送する方法を解決しました。