1. ホーム
  2. node.js

[解決済み] Node.js + Nginx - 今度は何?

2022-03-22 20:24:50

質問

サーバーにNode.jsとNginxをセットアップしました。さて、実際に使ってみようと思うのですが、その前に2つ質問があります。

  1. どのように連携させるか?リクエストはどのように処理すればよいのでしょうか?
  2. Node.jsのサーバーには2つのコンセプトがありますが、どちらが良いですか?

    a. 必要なウェブサイトごとに個別のHTTPサーバーを作成する。そして、すべてのJavaScriptコードをプログラムの開始時にロードし、コードが一度だけ解釈されるようにします。

    b. すべてのNode.jsリクエストを処理する1つのNode.jsサーバを作成します。これは、要求されたファイルを読み、その内容を評価します。したがって、ファイルは各リクエストで解釈されますが、サーバーのロジックははるかに単純です。

Node.jsの正しい使い方がよくわからないのですが。

どのように解決するのですか?

Nginx はフロントエンドサーバーとして動作し、この場合は node.js サーバーにリクエストをプロキシします。そのため、node 用に nginx の設定ファイルをセットアップする必要があります。

これは、私がUbuntuボックスで行ったことです。

ファイルを作成します。 yourdomain.com/etc/nginx/sites-available/ :

vim /etc/nginx/sites-available/yourdomain.com

その中に、次のようなものがあるはずです。

# the IP(s) on which your node server is running. I chose port 3000.
upstream app_yourdomain {
    server 127.0.0.1:3000;
    keepalive 8;
}

# the nginx server instance
server {
    listen 80;
    listen [::]:80;
    server_name yourdomain.com www.yourdomain.com;
    access_log /var/log/nginx/yourdomain.com.log;

    # pass the request to the node.js server with the correct headers
    # and much more can be added, see nginx config options
    location / {
      proxy_set_header X-Real-IP $remote_addr;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_set_header Host $http_host;
      proxy_set_header X-NginX-Proxy true;

      proxy_pass http://app_yourdomain/;
      proxy_redirect off;
    }
 }

nginx (>= 1.3.13) に WebSocket リクエストも処理させたい場合は、以下の行を location / セクションをご覧ください。

proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";

この設定が完了したら、上記の設定ファイルで定義されたサイトを有効にする必要があります。

cd /etc/nginx/sites-enabled/ 
ln -s /etc/nginx/sites-available/yourdomain.com yourdomain.com

でnodeサーバアプリを作成します。 /var/www/yourdomain/app.js で実行し localhost:3000

var http = require('http');

http.createServer(function (req, res) {
    res.writeHead(200, {'Content-Type': 'text/plain'});
    res.end('Hello World\n');
}).listen(3000, "127.0.0.1");
console.log('Server running at http://127.0.0.1:3000/');

構文の間違いがないかテストします。

nginx -t

nginxを再起動します。

sudo /etc/init.d/nginx restart

最後にnodeサーバを起動します。

cd /var/www/yourdomain/ && node app.js

これで、yourdomain.com に "Hello World" が表示されるはずです。

最後に、ノード・サーバーを起動する際の注意点として、ノード・デーモンに対して何らかの監視システムを使用する必要があります。素晴らしい アップスタートとモニターを使ったノードに関するチュートリアル .