web-dev-qa-db-ja.com

Node.jsをApacheで実行していますか?

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

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

つまり、Apache/PerlやApache/PHPなどのように、それらは連動して機能します。

66
JackSparrow123

Apacheを介したnodejsサイトのホスティングは、Apacheプロキシモジュールを使用して編成できます。

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

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

Sudo a2enmod proxy proxy_http

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

/ etc/apche2/sites-availablesを設定します

<VirtualHost *:80>
    ServerAdmin [email protected]
    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サービスを再起動します。

63
Evgeny Karpov

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

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

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

Nodeは静的コンテンツを提供する最良の方法ではありません。 NginxとVarnishの方が効果的です。 Nodeが動的データを処理する間、それらは静的コンテンツを提供できます。

Webアプリケーションにノードを使用することを検討している場合は、Expressがリストの上位にあるはずです。 Webアプリケーションを純粋にNodeに実装することもできますが、Express(およびFlatiron、Derby、Meteorなどの類似のフレームワーク)は、多くの苦痛と退屈を取り除くように設計されています。 Expressのドキュメントは最初は少々まばらに見えるかもしれませんが、ここで利用可能なスクリーンキャストを確認してください。 http://expressjs.com/2x/screencasts.html エクスプレスが提供するものと、なぜそれが有用であるかの感覚。 ExpressJSのgithubリポジトリには、認証からアプリの整理までのすべての優れた例も含まれています。

41
Darren

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

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

YES、Apache上でPerlとPHPとともにNode.jsを実行できます_ if _CGIモジュールとして実行します。まだ、Apacheのmod-nodeを見つけることができませんが、チェックアウトしてください:ApacheのCGI-Node http://www.cgi-node.org/ .

cgi-node の興味深い部分は、PHPを使用するのとまったく同じようにJavaScriptを使用して、動的コンテンツの生成、静的ページのサービス、SQLデータベースへのアクセスなどです。サーバーとクライアント/ブラウザ間のコア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をコーディングできるようにします。

お役に立てれば。

22
Uei Richo

あなたがしたいことを行うための一般的な方法は、それらを並べて実行し、Apacheからのリクエストをドメイン/ URLに基​​づいてnode.jsにプロキシするか、単にnode.jsコンテンツをノードからプルすることです。 jsポート。この後者の方法は、サイトなどにsocket.io搭載のウィジェットなどがある場合に非常に有効です。


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

見る:

http://expressjs.com/

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

4
hexist

独自のサーバーサイドJS実験を行っている間、 teajs を使用することになりました。 common.js に準拠し、V8に基づいており、「mod_teajs」Apacheサーバーモジュールを提供する唯一のプロジェクトです。

私の意見では、Node.jsサーバーは実稼働に対応しておらず、機能が多すぎます。Apacheはテスト済みであり、SSJSを実行する正しい方法です。

0

あなたはいつでもシェルスクリプトのような何かをすることができます:

#!/usr/bin/node

var header = "Content-type: text/plain\n";
var hi = "Hello World from nodetest!";
console.log(header);
console.log(hi);

exit;
0
Xaphiero