NginxからNode.jsへリバースプロキシする

NginxからNode.jsのWebサーバーへリバースプロキシしてみましたので手順をメモします。

OSはUbuntu 16.04 Serverです。

Node.jsのWebサーバーが待ち受けるポートは3000番とします。IPは192.168.33.10とします。

1. Nginxを設定します

DigitalOceanの設定ガイドを参考にして、@default.conf に3000番へリバースプロキシするように記述しました。

rootはNode.jsの静的ファイルがあるパブリックフォルダを指定し、静的ファイルはNginxで返します。

upstream nodejs {
 server localhost:3000;
}

location / {
 root /path/to/node-app/public;
 try_files $uri @node;
 expires 30d;
 access_log off;
}

location @node {
 proxy_pass http://node;
 proxy_redirect off;
 proxy_http_version 1.1;
 proxy_set_header Upgrade $http_upgrade;
 proxy_set_header Connection 'upgrade';
 proxy_set_header Host $host;
 proxy_set_header X-Real-IP $remote_addr;
 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
 proxy_cache_bypass $http_upgrade;
}

nginx をリスタートしておきます。

$ sudo service nginx restart

2. Node.jsのWebサーバーを起動して動作確認します

動作確認用に公式のExampleコードでNode.jsのWebサーバーを起動します。

@example.js

const http = require('http');

const hostname = '127.0.0.1';
const port = 3000;

const server = http.createServer((req, res) => {
  res.statusCode = 200;
  res.setHeader('Content-Type', 'text/plain');
  res.end('Hello World\n');
});

server.listen(port, hostname, () => {
  console.log(`Server running at http://${hostname}:${port}/`);
});

Webサーバーを起動します。

$ node example.js
Server running at http://127.0.0.1:3000/

ブラウザで192.168.33.10へアクセスして”Hello World”と表示されれば完了です。