ApacheをNode.jsに置き換えることはできますか?


151

通常の容疑者(Apache、MySQL、PHP)を使用してCentOSで実行しているWebサイトがあります。このWebサイトが最初に公開されて以来、かなり進化してきました。今では、これを使ってより洗練された機能、つまりリアルタイム通知を実行したいと考えています。私が読んだことから、Apacheはこれをうまく処理できません。ApacheだけをNode.jsに置き換えることができるかどうか疑問に思っています(「LAMP」の代わりに「LNMP」になります)。

解決策をオンラインで検索してみましたが、見つかりませんでした。私が読んだことを正しく解釈していれば、ほとんどの人がNode.jsはApacheとPHPの両方を置き換えることができると言っているようです。ただし、既存のPHPコードはたくさんあるので、そのままにしておくことをお勧めします。

まだ明白でない場合は、私はかなり混乱していて、いくつかの啓発を使用することができます。どうもありがとう!


類人猿サーバーは調べる価値があるかもしれません。
TryHarder 2014年

回答:


86

PHPをJavaScriptで書き直す準備ができている場合は、Node.jsでApacheを置き換えることができます。

サーバーとクライアントの間にリバースプロキシモードで実行されているApacheまたはNGINXインスタンスを配置すると、すべてのPHPを完全に置き換えることができるまで、Node.jsのJavaScriptのリクエストとApacheがホストするPHPのリクエストを処理できますJavaScriptコードで。これは幸せな媒体かもしれません:WebSocketをNode.jsで動作させ、Apache + PHPでより平凡な動作をさせます。


1
迅速な対応に感謝します!nginxはApacheよりもはるかに優れていますか?すでに.htaccessファイルが配置されているので、そのままにしておくと便利です。また、Apacheを使用してNode.jsにリクエストを転送しても意味がないことを読んだので、Apacheをまだ使用しているため、Node.jsの利点を失うことになります。Node.jsがポート80で「nodejs」という名前のサブフォルダー内の何かをリッスンし、そのサブフォルダーにないものはNode.jsによってApacheに渡されるほうがよいでしょうか?Apacheは8000のようないくつかの他のポートでリッスンでき
リック・

21
@リック、私は自分の答えを削除するのにかなり近づいています。Nodeはを使用できますsendfile。また、FastCGIサポートモジュールがあり、Nodeを介してPHPを提供することも簡単になります。nginx対Apacheに関しては、私は常にスレッドまたはマルチプロセスサーバー上の非同期スタイルのサーバーの吸盤でした:)しかし、Apacheのドキュメントを見つけて読むのがより簡単であることがわかりました。あなたが驚くべき数にスケーリングする必要がない限り、私はそれを個人的な好みと呼びます。:)
sarnold

3
@Rickそれが何であり、どのように機能するかを理解する前に、本番環境をNodeに移行したくない。ノードは、物事をより速くするための魔法の薬ではありません。イベント駆動型/非同期のパラダイムは新しいものではなく、なぜそれがすべてに使用されないのかには理由があります。en.wikipedia.org/wiki/Asynchronous_I/O
ØyvindSkaar

1
@Rick持っているものを置き換える必要があると考える代わりに、さらにNodeを実行した方がよいでしょう。すべてをノード(?)に渡す理由があるとは思わないでください。悪い考えのように聞こえます。別のポートまたはホストでノードを実行するだけです。
ØyvindSkaar

2
@ØyvindSkaar同意する。また、ほとんどのWebサイト(Wordpressなど)では、実際のボトルネックはデータベースであり、ファイルアクセスではありません。また、ファイルアクセスに問題がある場合、キャッシュは常に実行可能なソリューションです。とにかく、本当のパフォーマンスを得るには、PHP-APCは非常に安いトリックです。
magallanes

26

Node.jsは、イベント/非ブロッキングアーキテクチャのおかげで、Apacheよりも高速かもしれませんが、Apacheの機能の一部を置き換えるモジュール/ライブラリを見つけるのに問題があるかもしれません。

Node.js自体は軽量の低レベルフレームワークであり、Webアプリケーションのサーバー側のものとリアルタイムの部分を比較的迅速に構築できますが、Apacheははるかに幅広い構成オプションと「クラシック」なWebサーバー指向の機能を提供します。

PHPをnode.jsベースのwebアプリケーションフレームワーク(express.jsなど)に置き換えたくない場合は、Apacheを使用する必要があります(または、パフォーマンスの問題がある場合は、Nginxへの移行を検討してください)。


11

Node.jsはWebサービングの未来だと思いますが、既存のPHPコードがたくさんある場合は、Apache / MySQLが最善の策です。ApacheはNode.jsにリクエストをプロキシするように構成できます。またはNode.jsはApacheにリクエストをプロキシできますが、両方の場合、特に最初のケースではパフォーマンスがいくらか失われると思います。ただし、トラフィックの非常に多いWebサイトを実行していない場合は、それほど問題ではありません。

私は単にstackoverflowに登録しただけで、まだ受け入れられた回答についてコメントすることはできませんが、今日は実際にsendfile()を使用してHTTPプロトコルを通じてファイルを提供する単純なNode.jsスクリプトを作成しました。(受け入れられた回答がリンクする既存の例では、裸のTCPプロトコルのみを使用してファイルを送信し、HTTPの例を見つけることができなかったため、自分で書きました。)

だから、誰かがこれが便利だと思うかもしれません。sendfile()OS呼び出しを介してファイルを提供することは、「ユーザーランド」を介してデータがコピーされる場合よりも必ずしも高速ではありませんが、CPUとRAMの使用が少なくなるため、従来の方法よりも多くの接続を処理できます。

リンク:https : //gist.github.com/1350901


2
非常に真実ではありますが、apacheを取り除いて記述されていることを実行すれば、node.jsよりも速く、そうでなければ速くなると私は信じています。Apacheは、人々が見たり理解したりしない多くのことを実行します。これらのWebサーバーのすべての機能をnode.jsに追加すると、Apacheはそれらと同じくらい低速で実行されます。簡単な例としては、おそらくmynode.js / getfile?file = / etc / shadow
Rahly

8

私の言っていることを正確に説明する以前の SOの投稿(php + socket.io + node)

私はあなたがsomehost:8000にノードサーバーを設置し、socket.ioを使用してsocket.ioクライアントコードをタグにスラップし、最小限の作業で既存のアプリを大量の作業なしにsocket.io(リアルタイムの赤ちゃん)でロックできると思います。

ノードは唯一のバックエンドサーバーになることができますが、ノードはその名前に沿ってノードになるのが好きであることを覚えておいてください。私はRyan DahlがPHP Usersのグループに行った話をチェックしたところ、彼はいくつかのノードプロセスが作業を行い、互いに対話するというビジョンに関連する名前ノードについて言及しました。


2

最近のLAMPとMEANの比較。直接比較については、http://tamas.io/what-is-the-mean-stackを参照してください。

もちろん、M、E、Aは多少変動します。たとえば、最近のkoaが(E)xpressを置き換える可能性があります。

ただし、ApacheをNode.jsに置き換えるだけでは、Webスタックを最新化するための正しい方法ではない可能性があります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.