web-dev-qa-db-ja.com

nodejsとApacheを同じポート80に配置する方法

Nodejsをポート80に配置する必要がありますが、Apacheはすでにそれを使用しています。両方(nodejsとApache)を同じポート80に配置するにはどうすればよいですか?私の大学ではPORT 80を除くすべてのポートがブロックされているので、これが必要です。どうもありがとう

21
user1203334

私は個人的に@liammclennanとは逆の方法でこれを行いました。 一部の提案 Apacheを介したプロキシは、Nodeのパフォーマンスとスケーラビリティの利点のいくつかを無効にします(私のサーバーはそれほど多くのトラフィックを取得しないため、自分自身での経験はありません。 @liammclennanのリンクから: "Apacheを介して着信するすべてのリクエストにより、ApacheスレッドはNode.jsプロセスから応答が返されるまで待機/ブロックします。"、明らかに、Nodeのアーキテクチャとうまく一致しません。)

私は node-http-proxy を使用してNodeプロキシサーバーをセットアップしました。最初のリンク(my Node proxyポート80で動作します。Apacheと他のNodeサービスは動作しません)。これまでのところ、安定性の問題がときどきあるようですが、プロキシはまだcronジョブで実行されています(edit:最近ははるかに安定しているようです)プロキシはかなり軽量で、約30MBのメモリを消費します。

9
meloncholy

私はnode.jsプロキシを介してこれを行います。

http-proxynpmまたは 公式ページ でインストールします

例:

var http = require('http'),
httpProxy = require('http-proxy'),
proxyServer = httpProxy.createServer ({
    hostnameOnly: true,
    router: {
        'domain.com':       '127.0.0.1:81',
        'domain.co.uk':     '127.0.0.1:82',
        '127.0.0.1':        '127.0.0.1:83'
    }
});

proxyServer.listen(80);

これにより、ポート80をリッスンするノードプロセスが作成され、:81,82,83などに行くドメインのリクエストが転送されます。foreverでこれを実行し、init.dにエントリを追加することをお勧めします。システムがシャットダウンした場合に備えて稼働しています。

22
Matej

また、Apache 2のmod_proxyおよびmod_proxy_httpを使用することもできます。これらは、システムによっては信頼性が高いか、パフォーマンスが向上する場合があります。

次に例を示します。

# Use Apache for requests to http://example.com/
# but use Node.js for requests to http://example.com/node/
<VirtualHost *:80>
    ServerName example.com
    DocumentRoot /var/www/example/
    <Location /node>
        ProxyPass http://127.0.0.1:8124/
        ProxyPassReverse http://127.0.0.1:8124/
    </Location>
</VirtualHost>

そしてもちろん、仮想ホスト(443など)に別のポートを使用したり、Node.jsに別のポートを使用したり、サブドメインなどの別のブロックでプロキシを設定したりするなど、必要に応じてディレクティブを変更できます。 (例:node.example.com)。

10
Synexis

できません。 node.jsを別のポートで実行してから、Apacheを介してリクエストをプロキシする必要があります。これはmod_proxyを使用して行うことができます

http://davybrion.com/blog/2012/01/hosting-a-node-js-site-through-Apache/

0
liammclennan

私は通常、そのような状況でフロントエンドとして haproxy を使用し、適切なバックエンドサーバーへのプロキシを持っています。 (ただし、node.jsプロセスをプロキシサーバーにすることも、ニーズによっては有効なアプローチです)。

0