Webサーバ、Apache、PHP、Node.jsの関係性をちゃんと理解しましょう。
Webサーバは、OSのTCP80番ポートでHTTPリクエストを待ち受け、
HTTPリクエストが来たらHTTPレスポンスを返すものを指します。
ApacheとWebサーバの関係を解説します。
ApacheはWebサーバを手軽に実現する為の一つのアプリケーションです。
URLのパス部とパソコンの特定のディレクトリを=で紐付けて
http://localhost/index.html
を要求されたら、/var/www/html/index.html
を探してあればそれを返す仕組みになっています。
(この/var/www/html/index.html
というパスはApacheの設定を弄る事で柔軟に変更出来ます)
Apacheはそういうソフトなので、
http://localhost/index.php
を要求されたら、
/var/www/html/index.php
ファイルの中身をただ投げ返すだけです。
PHPの場合はそれを実行して、動的なHTMLを作ってほしいのでそういう挙動をされては困ります。
PHPとApacheの関係を解説します。
多くの言語(Node.js、Ruby、Python等)はWebサーバを自前で構築して配信する形ですが、
PHPはApacheのモジュールとして組み込んでWebサーバを実現するという方針になっています。
ビルトインウェブサーバー - PHPマニュアル
まぁ、ApacheだけがPHPの全てではなく、IISやFastCGIなんかもその対象ですけど。
サーバー固有のモジュール - PHPマニュアル
Apacheに組み込むmod_phpがPHP側から提供されており、
それを組み込んだ上でApacheを立ち上げると
裏でPHPのプロセスを4個程同時並行で起動させてスタンバイさせます。
HTTPリクエストで.php
の拡張子のファイルが呼ばれた場合、このPHPプロセスを中継して動的なHTMLファイルを生成してHTTPレスポンスとして宛てがいます。
(この辺は単にApacheとmod_phpの設定次第なので、特定のディレクトリだけに適用したり、html
拡張子のファイル等でもPHPプロセスを中継させる事が可能です。)
さて、最後にApacheとNode.jsの関係について解説します。
基本的にNode.jsは自前のWebサーバを構築して運用することを想定している為、
PHPのmod_phpのようなモジュールは存在しません。
なのでApacheを起動させるだけでよしなにやってくれるような事はありません。
なのでNode.jsで出来る事を知り、
その上でどうやってApache+PHPと関わっていくのかを決めなければなりません。
例えば、ブラウザはHTML、CSS、JSファイルしか認識出来ませんが、
Node.jsにはPug、Sass、TypeScriptからこれらのコードを生成することも可能です。
生成して吐き出す先のディレクトリを/var/www/html/
配下のディレクトリに設定してApacheの静的ファイル配信Webサーバを使って閲覧して動作検証するとか。
LaravelなんかのWebフレームワークでは、
フロントエンド用のファイルをNode.jsで生成するという連携をする設計で作られているようです。