テックブログ

【AWS-Webサービス】6_ApachからNodeのサーバーを返却する

の続き

(2024年4月時点)

前回でEC2インスタンスにソースコードを配置しました。
今回はサイトにアクセスしに来た際にnode.jsで立てたサーバーのサイトを表示するようにします。
httpは80番ポートでnode.jsは3000番ポートです。

実現方法としてリバースプロキシを用います。
リバースプロキシは、ウェブサーバーの一種で、クライアント(通常はウェブブラウザ)からのリクエストを受け取り、そのリクエストを別のサーバーに転送して処理させる役割を持ちます。

80番ポートのHTTPD(Apacheなどのウェブサーバー)がリバースプロキシとして機能し、クライアントからのHTTPリクエストを受け取ります。そのリクエストは、別のサーバーで動作しているNode.jsアプリケーション(3000番ポートで実行されている)に転送され、Node.jsアプリケーションが処理を行います。その後、Node.jsアプリケーションからのレスポンスがリバースプロキシに戻り、最終的にクライアントに返されます。
つまり、リバースプロキシは、クライアントとサーバーの間に立って、クライアントからのリクエストを受け取り、適切なサーバーに転送して処理を行い、その結果をクライアントに返す役割を果たします。

リバースプロキシの設定

sudo vi /etc/httpd/conf/httpd.conf

AWSコンソールよりEC2インスタンスを起動して上記のコマンドを入力してhttpd.confを開きます。
httpd.confはApache HTTPサーバーのメインの設定ファイルです。
Apacheが起動する際に読み込まれ、その設定に従ってサーバーが動作します。

<VirtualHost *:80>
    ServerName example.com
    ProxyPreserveHost On
    ProxyPass / http://localhost:3000/
    ProxyPassReverse / http://localhost:3000/
</VirtualHost>

末尾に上記設定を入力して保存します。
ポート80でアクセスしてきたらポート3000で起動しているnodeへ転換します。

sudo systemctl restart httpd

スーパーユーザー権限でsystemdを使用してApache HTTPサーバーを停止し、再起動されます。

ここで補足・・
a2enmodという、Apache HTTPサーバーのモジュールを有効化するためのコマンドがありますが、sudo yum -y install httpdでApache HTTP Serverがインストールされた場合、Apacheのモジュール管理ツールであるa2enmodは使用できません。これは、a2enmodはDebian系のディストリビューション(例:Ubuntu)で使用されるApacheのモジュール管理ツールであり、Red Hat系のディストリビューション(例:CentOS、Amazon Linux)では使用されません。

ここまでの設定でapp.jsを起動することでブラウザからアクセスした際にnodeがページを返却することができます。

EC2インスタンスの起動と同時にnodeを起動する

ここまでの設定ではEC2のコンソールを閉じるとapp.jsが削除されるため停止されてしまいます。
そのため、EC2インスタンスの起動中にapp.jsを起動し続ける設定を行います。
今回はPM2を使用します。

PM2(Process Manager 2)は、Node.jsアプリケーションを簡単に管理するためのプロセスマネージャーです。PM2は、Node.jsアプリケーションをデーモンとして実行し、監視・制御する機能を提供します。

sudo npm install pm2@latest -g

スーパーユーザー権限でnpmを使用して、最新バージョンのPM2パッケージをグローバルにインストールします。
pm2@latest: インストールするパッケージの名前とバージョンです。
pm2はNode.jsのアプリケーションプロセスを管理するためのツールであり、@latestは最新バージョンをインストールすることを指示します。

cd <app.jsのあるディレクトリ>
pm2 start app.js

pm2 startup

PM2を使用してapp.jsというファイルをNode.jsアプリケーションとして起動します。アプリケーションはバックグラウンドで実行され、PM2によって監視されます。

ここまでの設定にて常にブラウザでアクセスした際にnodeのページを返却します。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です