ウェブサイト検索

UbuntuでNginxリバースプロキシを使用してWebアプリをホスティングする方法


Linuxシステムで10年以上の経験がある者として、Nginxを使用してリバースプロキシを設定することは、ウェブアプリケーションへのトラフィックを処理する最も一般的かつ効率的な方法の一つであると言えます。

リバースプロキシは、クライアントのリクエストを適切なバックエンドサーバーに転送する仲介サーバーとして機能し、ロードバランシング、セキュリティ、パフォーマンスのための重要なツールです。

このガイドでは、NginxをUbuntu 24.04上でリバースプロキシとして設定する手順を説明し、Nginxの背後でシンプルなウェブアプリケーションをホストする例を紹介します。

前提条件

始める前に、次のものを用意してください:

  • Ubuntu 24.04 サーバーは稼働中です(VPSまたは物理サーバーを使用できます)。
  • システム管理タスクを実行するためのルートまたはsudo権限。
  • バックエンドサーバーで動作しているサンプルウェブアプリケーション(この例では基本的なNode.jsアプリを使用します)。
  • Linuxコマンドとネットワークの概念に関する基本的な知識。

ステップ1: Ubuntu 24.04にNginxをインストールする

まず、次のコマンドを使用して、デフォルトのUbuntuリポジトリからNginxウェブサーバーをインストールする必要があります。

sudo apt update
sudo apt install nginx

インストールが完了したら、Nginxの状態を確認して動作していることを確認できます:

sudo systemctl status nginx

Nginxが実行されていない場合は、以下のコマンドで起動してください:

sudo systemctl start nginx

Nginxが起動時に自動的に開始するようにするには:

sudo systemctl enable nginx

サーバーでUFWファイアウォールが有効になっている場合は、HTTP(ポート80)トラフィックが許可されていることを確認してください。

sudo ufw allow 'Nginx Full'
sudo ufw enable

ステップ2: バックエンドWebアプリケーションの設定

この例では、Node.js アプリケーションをバックエンドサーバーとして使用し、ポート 3000 で待機します。

最初に、サーバーにNode.jsとnpmをインストールしてください:

sudo apt install nodejs npm

さて、シンプルなNode.jsウェブアプリケーションを作成しましょう:

sudo mkdir /var/www/myapp
cd /var/www/myapp

Node.js アプリを初期化します:

sudo npm init -y

Expressをインストールします。これはNode.jsのためのシンプルなウェブフレームワークです。

sudo npm install express

/var/www/myapp ディレクトリ内に、次の内容を含む app.js ファイルを作成してください:

const express = require('express');
const app = express();
const port = 3000;

app.get('/', (req, res) => {
  res.send('Hello, this is a backend app!');
});

app.listen(port, () => {
  console.log(`App running on http://localhost:${port}`);
});

Node.js アプリケーションを開始します。

sudo node app.js

あなたのバックエンドWebアプリケーションは現在http://localhost:3000で実行されています。ブラウザで次のアドレスに移動することでこれを確認でき、“こんにちは、これはバックエンドアプリです!”というメッセージが表示されるはずです。

http://your-server-ip:3000

ステップ3: Nginxをリバースプロキシとして構成する

では、外部からのリクエストをポート 3000 で実行されている Node.js バックエンドに転送するために Nginx を設定しましょう。

まず、sites-availableディレクトリに新しい設定ファイルを作成します:

sudo nano /etc/nginx/sites-available/myapp

新しいファイルで、Nginxにポート3000で実行されているバックエンドサーバーに着信HTTPリクエストを転送するように指示するために、次の設定を追加してください:

server {
    listen 80;
    server_name your_domain_or_ip; location / { proxy_pass http://localhost:3000; # Forward requests to your backend server 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; } }

構成を保存した後、この構成を有効にするためにsites-enabledディレクトリへのシンボリックリンクを作成します:

sudo ln -s /etc/nginx/sites-available/myapp /etc/nginx/sites-enabled/

Nginxを再起動する前に、構文エラーがないことを確認することが重要です。

sudo nginx -t
sudo systemctl restart nginx

今、ブラウザを開いて、サーバーのパブリックIPアドレスまたはドメイン(例:http://your-server-ip または http://your_domain)に移動してください。

「こんにちは、これはバックエンドアプリです!」というメッセージが表示されているはずです。これは、NginxがあなたのバックエンドのNode.jsアプリケーションにリクエストを正常に転送していることを意味します。

安全な接続のために、Let's Encryptを使ってSSLを設定できます。

sudo apt install certbot python3-certbot-nginx
sudo certbot --nginx -d your_domain_or_ip
結論

このガイドでは、Nginxをリバースプロキシとして設定し、Ubuntu 24.04サーバー上のlocalhost:3000で実行されているバックエンドのNode.jsウェブアプリケーションにHTTPリクエストを転送する方法について説明します。

これらのステップに従うことで、Nginxによるリバースプロキシの基本概念を学び、Nginxの背後でシンプルなウェブアプリケーションをホストする方法を理解しました。この設定により、より複雑なアプリケーションに簡単に拡張でき、必要に応じてインフラをスケールアップできます。

関連記事: