EC2をNginx+node.jsでWEBサーバーにする

・ ディストリビューション: Amazon Linux 2023.1.20230825
・ インスタンスタイプ: t3a.nano
・ ボリュームサイズ: 20GB

タイムゾーンを日本に変更する。
※使用できるタイムゾーンはlist-timezonesサブコマンドで確認できる

# timedatectl set-timezone Asia/Tokyo

メモリが512MBしかないのでスワップを追加する。
※事前にswapon –summaryで既存スワップを確認済み

# dd if=/dev/zero of=/swapfile bs=1M count=1024
# mkswap /swapfile
# swapon /swapfile

fstabの末尾にも設定を1行追加して永続化する。

/swapfile    none    swap    sw    0    0

nvmを使用してnode.jsをインストールする。
※使用できるnode.jsのバージョンはnvm ls-remoteで確認できる

# dnf install git
$ git clone https://github.com/creationix/nvm.git ~/temp-nvm
$ ~/temp-nvm/install.sh
$ rm -r ~/temp-nvm/
$ source ~/.bashrc
$ nvm install --lts

適当なWEBサーバーを作成する。

const http = require("http");
http.createServer(function(request, response) {
    response.writeHead(200, {"Content-Type": "text/plain"});
    response.end("Hello, World!\n");
}).listen(3000);

node.jsでWEBサーバーを起動しておく。

$ node ~/testapp.js

Nginxをインストールして起動+有効化する。

# dnf install nginx
# systemctl enable --now nginx

リバースプロキシを設定してnode.jsのWEBサーバーに中継する。
※「client_max_body_size 10m」で10MBまでの画像なども受け取れる
※「proxy_set_header Host $host」でクライアントが送信したリクエストのホスト名を渡す
※「proxy_set_header X-Real-IP $remote_addr」でクライアントのIPアドレスを渡す

server {
    listen 80;
    listen [::]:80;
    server_name testapp.example.com;
    client_max_body_size 10m;
    location / {
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_path http://localhost:3000/;
    }
}

Nginxの設定値を再読込する。

# systemctl reload nginx
カテゴリーAWS