アジェンダ
Expressサーバーを作成し、Nginxからそのサーバーにリクエストをプロキシしてレスポンスを返すまでの手順を簡単にまとめます。
Nginxはリバースプロキシとして動作し、外部からのリクエストをExpressサーバーに転送します。
1. Expressサーバーの作成
まず、EC2インスタンス上でNode.jsとExpressをセットアップし、簡単なExpressサーバーを作成します。
Node.jsとnpmのインストール
sudo apt update
sudo apt install nodejs
sudo apt install npm
Expressサーバーの作成
mkdir my-express-app
cd my-express-app
npm init -y
npm install express
app.js
ファイルの作成
次のコマンドでapp.js
ファイルを作成し、vimエディタを使用して編集します:
vim app.js
app.js
というファイルを作成し、次のコードを記述します:
const express = require('express');
const app = express();
app.get('/', (req, res) => {
res.send('Hello from Express!');
});
const port = 3000;
app.listen(port, () => {
console.log(`Server is running on port ${port}`);
});
エディタを保存して終了するには、:w
で保存し、:q
でvimを終了します。
Expressサーバーの起動
node app.js
これで、http://localhost:3000
でExpressサーバーが稼働しているはずです。
2. Nginxの設定
次に、Nginxをリバースプロキシとして設定し、Nginx経由でExpressサーバーにリクエストが届くようにします。
Nginxのインストール
sudo apt install nginx
Nginxの設定ファイルを編集
設定ファイルは/etc/nginx/sites-available/default
にあります。以下のようにリバースプロキシの設定を追加します。
sudo vim /etc/nginx/sites-available/default
server
ブロックに以下を追加します:
server {
listen 80;
server_name your_server_domain_or_IP;
location / {
proxy_pass http://localhost:3000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
}
ここで、your_server_domain_or_IP
はEC2インスタンスのパブリックIPやドメインに置き換えます。
Nginxの再起動
設定を有効にするためにNginxを再起動します。
sudo systemctl restart nginx
3. 動作確認
ブラウザでEC2インスタンスのパブリックIPにアクセスし、NginxがExpressサーバーからのレスポンスを正しくプロキシしているか確認します。
http://your_ec2_public_ip
Hello from Express!
と表示されれば成功です。
最終的なWebサーバーインスタンス内のディレクトリ構成
/home/ubuntu/my-express-app
├── app.js # Expressサーバーのエントリーポイント
├── node_modules/ # npmモジュール
├── package.json # npmプロジェクトの設定ファイル
└── package-lock.json # 依存関係の詳細
Nginxの設定は次の場所にあります:
/etc/nginx/sites-available/default # Nginxのリバースプロキシ設定
補足
- NginxとExpressの役割: Nginxはリバースプロキシとして動作し、クライアントからのリクエストをExpressに転送し、Expressのレスポンスをクライアントに返します。
- リバースプロキシの理由: Nginxは高性能なリクエスト処理ができ、セキュリティや負荷分散、SSLターミネーションなどの機能を提供するため、Node.jsのアプリケーションを直接公開するのではなく、Nginx経由で運用するのが一般的です。