17

バックエンドに Apache と PHP を使用した Web アプリケーションがあります。私はこれを多くの新機能で強化し、新しい作業に node.js を使用することを検討しています。

まず、PHP と node.js を同じマシンに共存させることはできますか? なぜだかわかりません。次に、node.js コードを Javascript から直接呼び出して、JSON を返すことはできますか?

4

4 に答える 4

19

はい、はい。Node と Apache/PHP は単一のサーバー上で共存できます。

遭遇する可能性が高い唯一の問題は、両方が同じポートでリッスンできないことです。デフォルトでは、HTTP はポート 80 で実行され、一度に 1 つのポートで「リッスン」できるプロセスは 1 つだけです。そのため、Node アプリを別のポート (8080 など) で実行する必要がある場合があります。ターゲット ユーザーのいずれかがポート 80 のみに制限されている場合、問題が発生する可能性があります。

于 2013-09-10T22:56:14.193 に答える
2

はい、できます。サーバーが Ubuntu または Debian の場合は、次の手順に従います。

  1. ターミナルを開いて書き込みます:

    sudo curl -sL https://deb.nodesource.com/setup_8.x | bash -
    sudo apt-get install nodejs
    
  2. curl がサーバーにインストールされていない場合:

    sudo apt-get install curl
    
  3. インスタンスをシャットダウンせずにターミナルを終了しても Node.js アプリケーションが停止しないようにするには、Foreverというパッケージを使用します。

    npm install -g forever
    
  4. サイトがアップロードされ、NPM と Forever が正しく構成されている場合は、Node.js インスタンスを開始します。Express.js を使用している場合は、次のコマンドを実行して Forever インスタンスを開始します。

    forever start ./path/to/your/project
    
  5. 上記のコマンドでは、./bin/www スクリプトをフィードしていることに気付くでしょう。これは、npm start が Express.js に対して起動するものだからです。スクリプトを起動スクリプトに変更してください。

デフォルトでは、Web サイト (nodejs) はhttp://localhost:3000で実行されていますが、これはリモートの訪問者にとって理想的ではありません。Apache によって処理されるドメイン名からサイトにアクセスできるようにしたいと考えています。Apache VirtualHost ファイルには、次のような内容が含まれている可能性があります。

<virtualhost *:80>
    ServerName www.example.com
    ProxyPreserveHost on
    ProxyPass / http://localhost:3000/
    ProxyPassReverse / http://localhost:3000/
</virtualhost>

www.yousite.com ドメイン名がヒットするたびにNode.js http://localhost:3000サイトを取得するプロキシを作成するように Apache に指示しています。すべてのアセットとページは、 http://localhost:3000の代わりに www.yoursite.com パスを使用するため、Web サイトが他と同じように提供されていると誰もが信じてしまいます。

ただし、デフォルトでは、Apache プロキシ モジュールは有効になっていません。モジュールがまだ有効になっていない場合は、次の 2 つのコマンドを実行する必要があります。

a2enmod proxy
a2enmod proxy_http

これらのモジュールを有効にした後、Apache を再起動する必要がある場合があります。

この情報はThe Poliglot Developerで入手できます。

于 2018-10-16T00:41:48.057 に答える
-2

はい、php を使用してクライアントに JavaScript ページを提供する場合、JavaScript コードは AJAX リクエストを使用して、ノード サーバーから公開されたルートにアクセスできます。

于 2013-09-10T22:54:57.907 に答える