82

Perl を使用してページを提供するマシンにも Apache ウェブサーバーがインストールされています。

プロジェクトでは、Perl/Ruby の代わりに Node.js を使用することにしました。Apache を Web サーバーとして使用して (ページを提供する)、Node.js を使用して Web ページを動的に作成することができるかどうか (これは私が作成している Web アプリ用です) を考えてみてください。

つまり、Apache/Perl や Apache/PHP などと同じように連携して動作することができます。

4

7 に答える 7

74

apache を介して nodejs サイトをホストすることは、apache プロキシ モジュールを使用して整理できます。

デフォルトのポート1337を使用して、localhostでnodejsサーバーを起動することをお勧めします

次のコマンドでプロキシを有効にします。

sudo a2enmod proxy proxy_http

サーバーを保護するまで、ProxyRequests によるプロキシを有効にしないでください。オープン プロキシ サーバーは、ネットワークとインターネット全体の両方にとって危険です。ProxyRequests を Off に設定しても、ProxyPass ディレクティブの使用は無効になりません。

/etc/apche2/sites-availables を構成します

<VirtualHost *:80>
    ServerAdmin admin@site.com
    ServerName site.com
    ServerAlias www.site.com 

    ProxyRequests off

    <Proxy *>
        Order deny,allow
        Allow from all
    </Proxy>

    <Location />
        ProxyPass http://localhost:1337/
        ProxyPassReverse http://localhost:1337/
    </Location>
</VirtualHost>

apache2 サービスを再起動します。

于 2014-05-28T11:08:11.277 に答える
45

いいえ。NodeJS は mod-perl や mod-php のように Apache モジュールとして利用できないため、Apache の「上で」ノードを実行することはできません。hexist が指摘したように、ノードを別のプロセスとして実行し、2 つの間の通信を調整することは可能ですが、これは既に使用している LAMP スタックとはまったく異なります。

多数の同時接続がある場合、ノードは Apache の代替としてパフォーマンス上の利点を提供します。考えられるほとんどすべてのモジュールの巨大なエコシステムもあります。

あなたの質問から、リクエストごとにページを動的に生成する必要があるのか​​、それともキャッシュと提供のために定期的に新しいコンテンツを生成するだけなのかが明確ではありません。後者の場合、別個のノード タスクを使用して、Apache が提供するディレクトリにコンテンツを生成できますが、これも PHP や Perl とはまったく異なります。

ノードは、静的コンテンツを提供する最良の方法ではありません。Nginx と Varnish はその点でより効果的です。ノードが動的データを処理している間に、静的コンテンツを提供できます。

Web アプリケーションに node を使用することを検討しているのであれば、Express をリストの上位に置く必要があります。純粋に Node で Web アプリケーションを実装することもできますが、Express (および Flatiron、Derby、Meteor などの同様のフレームワーク) は、多くの苦労と退屈をなくすように設計されています。Express のドキュメントは最初は少しわかりにくいかもしれませんが、まだ利用可能なスクリーン キャストをチェックしてください : http://expressjs.com/2x/screencasts.htmlそれは便利です。ExpressJS の github リポジトリには、認証からアプリの整理まで、すべての優れた例が多数含まれています。

于 2013-01-18T04:43:12.207 に答える
26

ここには多くの良いヒントがありますが、あなたが尋ねた質問に答えたいと思います:

つまり、Apache/Perl や Apache/PHP などと同じように連携して動作することができます。

はい、Node.js をCGI モジュールとして実行する場合は、Perl および PHP と一緒に Apache で Node.js を実行できます。まだ、Apache 用の mod-node を見つけることができませんが、チェックアウトしてください: CGI-Node for Apache here http://www.cgi-node.org/

cgi-nodeの興味深い点は、動的コンテンツの生成、静的ページのサービスアップ、SQL データベースへのアクセスなどに PHP を使用するのとまったく同じように JavaScript を使用することです。サーバーとクライアント/ブラウザー間でコア JavaScript ライブラリを共有することもできます。

クライアントとサーバー間の単一言語への移行が進んでおり、JavaScript が有力な候補のようです。

cgi-node.org サイトからの簡単な例:

<? include('myJavaScriptFile.js'); ?>
<html>
   <body>
      <? var helloWorld = 'Hello World!'; ?>
      <b><?= helloWorld ?><br/>
      <? for( var index = 0; index < 10; index++) write(index + ' '); ?>
   </body>
</html>

これは以下を出力します:

Hello World!
0 1 2 3 4 5 6 7 8 9

また、HTTP 要求への完全なアクセス権も持っています。これには、フォーム、アップロードされたファイル、ヘッダーなどが含まれます。

私は現在、Godaddy の cgi-node モジュールを介して Node.js を実行しています。

CGI-Node.org サイトには、開始するためのすべてのドキュメントがあります。

私はこれについて絶賛していることを知っていますが、最終的には PHP 以外のものを使用することに安堵しています。また、クライアントとサーバーの両方で JavaScript をコーディングできること。

お役に立てれば。

于 2014-10-08T16:06:02.847 に答える
5

やりたいことを実行するための一般的な方法は、それらを並べて実行し、ドメイン/ URL に基づいて apache から node.js にリクエストをプロキシするか、単に node.js コンテンツをノードからプルすることです。 js ポート。この後者の方法は、socket.io を利用したウィジェットなどをサイトに配置する場合などに非常にうまく機能します。


ただし、すべての動的コンテンツ生成をノードで行う場合は、node.js をプライマリ Web サーバーとして使用することもできます。これは、静的および動的 http 要求の両方を処理するのに非常に優れています。

見る:

http://expressjs.com/

https://github.com/joyent/node/wiki/modules

于 2013-01-16T23:48:05.607 に答える