0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Apache + PHP で構成したWebサーバー上に Node.js(express)を追加する手順

Posted at

はじめに

通常はPHPでWebアプリを実行しているけど、Node.jsも併用したい場合があります(WebSocketを利用してリアルタイムに通信したい場合など)

そのような場合、Apacheをリバースプロキシとして動作させて一部のURL(パス)をNode.jsに転送することで併用することができるようになります

概要

http://localhost/node にアクセスがあった場合は、Node.js側で実行

それ以外ではphpで実行したい場合は、(Apacheの)リバースプロキシを利用することで実現します

具体的には、特定のパス(上記では/node)にアクセスがあった場合、Node.jsへ転送する設定を行います。
(転送時は、Node.jsのプログラムを先に起動しておいて接続待ち状態にしておきます)

ここではUbuntu環境を前提に手順を記載します

  1. Apache環境の設定
    1. リバースプロキシモジュールの読み込みの設定を行う
    2. リバースプロキシの設定を追加する
  2. Node.js環境の設定
    1. Webアプリを作成するための準備(express)を行う
    2. テスト用のNode.jsアプリを作成して、起動する

1. Apache環境の設定

1.1 リバースプロキシモジュールの読み込みの設定を行う

標準ではリバースプロキシモジュールが読み込まれていません

/etc/apache2/conf-enabledproxy.loadproxy_http.loadが存在しないことを確認後、下記コマンドでモジュールを有効化します

$ sudo a2enmod proxy
$ sudo a2enmod proxy_http

1.2 リバースプロキシの設定を追加する

<VirtualHost>ディレクティブに/nodeへのアクセスをNode.jsに転送するための設定を追加します

VirtualHostのデフォルト設定/etc/apache2/sites-available/000-default.confファイルに、下記内容を追加します

000-default.conf
<VirtualHost *:80>
  # ~~省略~~

    # Node.jsへのリバースプロキシ設定
    ProxyPass /node http://localhost:3333/node
    ProxyPassReverse /node http://localhost:3333/node

  # ~~省略~~
</VirtualHost>

  • /nodeにアクセスがあった場合、Node.jsの3333番ポートへ転送を行います

設定完了後、Apacheの再起動を行います

$ sudo systemctl restart apache2

2. Node.js環境の設定

Node.jsはインストールされている前提です

2.1 Webアプリを作成するための準備(express)を行う

適当なディレクトリを作成し、expressをインストールします

$ node i express

2.2 テスト用のNode.jsアプリを作成して、起動する

/nodeにアクセスがあった場合に、Node.jsと返すテストアプリを作成します

3333番ポートで待ち受けします

node.js
const express = require('express');
const app = express();
const port = 3333;

app.use('/node', (req, res) => {
  console.log(`${new Date()} ${req.baseUrl}`);
  res.send('Node.js');
});

app.listen(port, () => {
  console.log(`listening on port ${port}`);
});

テストアプリを起動しておきます

$ node node.js
listening on port 3333

3. 動作確認

/nodeにアクセスしたときはNode.jsで処理され、他へのアクセスはPHPで処理されていることを確認します

  • http://localhostにアクセスしてApacheが動作していることを確認

image.png

  • http://localhost/nodeにアクセスしてNode.jsのアプリが処理を行っていることを確認

image.png

Node.jsのコンソールには、/nodeにアクセスしたログが残っています

$ node node.js
listening on port 3333
Sun Dec 22 2024 22:46:16 GMT+0900 (日本標準時) /node
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?