チュートリアル:AWSでNGINXとNGINX PlusをWebサーバーおよびリバースプロキシとして設定する方法

NGINX | 2021年11月12日

15年以上前の登場以来、NGINXの人気は着実に高まり、現在では世界で最も人気のあるWebサーバーとして、[ngx_snippet name=’number-sites’]のWebサイトを支えています。この場合、多くの人々と同じ選択をするのが賢明です。あらゆるWeb配信のニーズにNGINXを使用し、さらにリバースプロキシ、コンテンツキャッシュ、ロードバランサー、APIゲートウェイなどの機能も活用できます。

このブログ記事では、個人用コンピューターの設定に影響を与えない使いやすい構成で、Amazon Web Services(AWS)上のUbuntu 20.04にNGINXを導入して稼働させる手順を説明します。対象となるのは、NGINXと、NGINX Plus(エンタープライズグレードの追加機能と商用サポートを提供するバージョン)の両方です。

ここで説明する手順を完了したら、NGINXの構成、運用、管理について学べる1日コースのNGINX Coreトレーニング(講師による指導またはオンデマンド)もご検討ください。このコースは、講師による指導形式または自習形式で提供される、その他の高度なトピックに関するコースを受講するための準備にもなります。

このチュートリアルでは、以下のタスクの手順を説明します。

ターミナルへのアクセス

このチュートリアルでは、Amazon Elastic Compute Cloud(EC2)インスタンスに接続するためのターミナルが必要です。Macにはターミナルが組み込まれていますが、WindowsユーザーはPuTTYまたは同等のツールをダウンロードする必要があります。ローカル環境のターミナルを使用してNGINXまたはNGINX Plusをセットアップし、Webコンテンツを配信する場合は、AWSのセットアップに進んでください。

macOSでターミナルにアクセスする

Macでは、内蔵の「ターミナル」ツールを使用して、このチュートリアルのすべての操作を実行できます。

  1. 画面上部のバーの右端にある虫眼鏡アイコンをクリックします。
  2. ポップアップボックスに「terminal」と入力し、Enterキーを押します。別のターミナルウィンドウが開きます。

Windowsでターミナルにアクセスする

Windowsにはターミナルが組み込まれていないため、インターネットからダウンロードする必要があります。AWSと同様に、世界中で使用されているsshクライアントのPuTTYを推奨します。

  1. Access the PUTTYダウンロードページにアクセスします。
  2. ファイルを任意の場所にダウンロードしてインストールし、開きます。ただし、AWSのセットアップの手順を完了するまで、実際のターミナルにはアクセスできません。

AWSのセットアップ

このチュートリアルでは、Amazon Virtual Private Cloud(VPC)があり、ほとんどのアカウントで作成されるデフォルトのVPC設定をそのまま使用できることを前提としています。このセクションでは、EC2インスタンスを作成して接続し、AWS環境をセットアップします。

注:以下のEC2インスタンス作成手順とスクリーンショットは執筆時点で確認済みですが、AWSによって変更される場合があります。必要に応じて手順を読み替えてください。

  1. On the AWSホームページで(AWS Management)Consoleにサインインします。必要に応じて、先に新しいアカウントを作成してください。
  2. コンソールのタイトルバーで[Services]をクリックし、[Compute]セクションの[EC2]をクリックします。
    AWSの[Services]ページで[EC2]を選択している画面のスクリーンショット
  3. 表示されたEC2 Dashboardページで[Launch Instance]ボタンをクリックします。
  4. On the Step 1ページで、Ubuntu Server 20.04 LTS (HVM), SSD Volume Typeの行にある[Select]ボタンをクリックし、アーキテクチャはデフォルトの64-bit (x86)を選択したままにします。
    Amazon EC2インスタンス作成ウィザードの[Step 1]ページのスクリーンショット
  5. On the Step 2ページで、インスタンスタイプとして「t2.micro」を選択します。本稿執筆時点では「Free tier eligible」と表示され、デフォルトで選択されています。[Next: Configure Instance Details]ボタンをクリックします。
    Amazon EC2インスタンス作成ウィザードの[Step 2]ページのスクリーンショット
  6. On the ステップ3ページで、使用するVPCが[Network]フィールドで選択され、[Auto-assign Public IP]フィールドがデフォルトの[Use Subnet setting (Enable)]または[Enable]に設定されていることを確認します。その他の設定はデフォルトのままにします。
    Amazon EC2インスタンス作成ウィザードの[Step 3]ページのスクリーンショット
  7. ページ上部の[6. Configure Security Group]をクリックします。
  8. On the ステップ6ページで、受信HTTPおよびHTTPSトラフィックを許可するために、以下の手順を実行します(デフォルトでは、EC2インスタンスはSSHトラフィックのみを受け入れます)。
    Amazon EC2インスタンス作成ウィザードの[Step 6]ページのスクリーンショット
    • 表の下にある[Add Rule]ボタンをクリックし、Type列のドロップダウンメニューから[HTTP]を選択します。このチュートリアルでは、任意のIPアドレスからのアクセスを許可します(Source列の値は[Anywhere 0.0.0.0/0, ::/0]です)。本番環境では、セキュリティグループを使用してアクセスを制御するよう求めるページ上の警告に従うことを推奨します。
    • HTTPSについても前の手順を繰り返します。
    • ページ下部の[Review and Launch]ボタンをクリックします。
  9. On the ステップ7ページで、下部にある[Launch]ボタンをクリックします。
  10. 表示されたボックスで、新しいキーペアを作成します。
    Amazon EC2の[Select an existing key pair or create a new key pair]ポップアップウィンドウのスクリーンショット
    • 上部のドロップダウンメニューから[Create a new key pair]を選択します。
    • キーペアのタイプを選択します。このチュートリアルでは、RSAを選択します。
    • [Key pair name]フィールドに、NGINX_keyなどの名前を入力します。
    • [Download Key Pair]ボタンをクリックします。
    • 以下のアニメーション画像に示すように、[Download Key Pair]ボタンがチェックボックスに置き換わります。秘密鍵にアクセスできることを示すため、このチェックボックスをクリックします。
    • [Launch Instances]ボタンをクリックします。
  11. ファイルマネージャーで、ダウンロードした「.pem」ファイル(このチュートリアルでは「NGINX_key.pem」)を安全な場所に移動します。このチュートリアルでは「/Desktop/NGINX」ディレクトリに配置します。
  12. Windowsターミナルを使用する場合は、AWSの手順に従ってPuTTYgenユーティリティをダウンロードし、.pemファイルを.ppkファイルに変換します。
  13. [Launch Status]ページで、下部にある[View Instances]ボタンをクリックします。
  14. 開いた[Instances]ページのテーブルに新しいインスタンスが表示されます。名前を付けます。
    Amazon EC2の[Instances]ページでインスタンス名を編集中の画面
    • Click the pencil icon in the 名前列の鉛筆アイコンをクリックします。
    • [名前を編集]ポップアップボックスに名前を入力し、[保存]ボタンをクリックします。
  15. 画面上部の[Connect]ボタンをクリックします。次のようなウィンドウが表示されます。[SSH client]タブを開き、手順に従ってインスタンスに接続します。Windowsを使用している場合は、コマンド内の「.ppk」を「.pem」に置き換えます。
    Amazon EC2の[Connect to instance]ポップアップウィンドウのスクリーンショット

NGINXソフトウェアのインストール

AWS環境のセットアップが完了したら、次にNGINX Open SourceまたはNGINX Plusをインストールします。NGINX Plusは30日間無料でお試しいただけます。このチュートリアルではどちらも使用できますが、NGINX Plusの高度な機能をさらに詳しくお試しになる場合は、無料トライアルをお申し込みください。

NGINX Open Sourceのインストール

ほとんどのLinuxディストリビューションとBSD系OSでは、標準のパッケージリポジトリからNGINX Open Sourceを入手できますが、通常は最新バージョンではありません。NGINX Open Sourceは、nginx.orgから直接ダウンロードすることを推奨します。Ubuntuのパッケージマネージャー(apt)にNGINXリポジトリを追加するには、いくつかの追加手順が必要です。

NGINX Open Sourceをインストールするには、次の手順に従います。

  1. ターミナルを開きます。
  2. NGINX署名キーをダウンロードします:
$ sudo wget http://nginx.org/keys/nginx_signing.key
  1. キーを追加します:
$ sudo apt-key add nginx_signing.key
  1. ディレクトリを「/etc/apt」に変更します。
$ cd /etc/apt
  1. Edit the sources.listファイルを編集し、末尾に次のテキストを追加します。
deb http://nginx.org/packages/ubuntu focal nginx
deb-src http://nginx.org/packages/ubuntu focal nginx
  1. 注:これらの各行にあるfocalキーワードはUbuntu 20.04に対応しています。別のバージョンのUbuntuを使用している場合は、そのリリースのコードネームの最初の単語に置き換えてください(たとえば、Ubuntu 18.04の場合はbionic)。
  2. NGINXソフトウェアを更新します:
$ sudo apt-get update
  1. NGINXをインストールします:
$ sudo apt-get install nginx
  1. プロンプトが表示されたら「Y」と入力します。
  2. NGINXを起動します:
$ sudo systemctl start nginx.service
  1. ステータスを確認します:
$ sudo systemctl status nginx.service
  1. 「Webページを開く」に進みます。

NGINX Plusのインストール

  1. NGINX Plusをまだお持ちでない場合は、30日間の無料トライアルにお申し込みください。
  2. トライアルサブスクリプションが利用可能になったことを知らせるメール通知を受信したら、記載されている手順に従ってセキュリティ証明書、秘密鍵、JWTをダウンロードし、NGINX Plusをインストールします。
  3. インストールが完了し、NGINX Plusが稼働していることを確認したら、「Webページを開く」に進みます。

Webページを開く

NGINXソフトウェアを起動したら、サイトのコンテンツを配信するように設定する前に、NGINXとNGINX Plusがデフォルトで配信するWebページを確認します。次の手順に従ってください。

  1. まだ開いていない場合は、EC2 Dashboardの[Instances]タブに移動します。(上部のConsoleナビゲーションバーでServices、ComputeセクションでEC2、左側のナビゲーション列で[Instances]の順にクリックする方法もあります。)
  2. テーブルを右にスクロールし、[Public IPv4 address]列にインスタンスのパブリックIPアドレスが表示されるまで移動します(スクリーンショットでは3.22.51.xxx)。そのアドレスを選択し、クリップボードにコピーします。
    インスタンスの[Public IPv4 address]フィールドが表示されたAmazon EC2の[Instances]ページのスクリーンショット
  3. ブラウザーで新しいタブを開き、アドレスバーにアドレスを貼り付けます。デフォルトの「Welcome to nginx!」ページが表示されます。これは、NGINXがインストールされて稼働中であるものの、まだ設定されていないことを示します。
    ウェルカムページにより、NGINXリバースプロキシおよびWebサーバーが稼働中であることを確認できます

サンプルファイルのセットアップ

正常に動作するバージョンのNGINXまたはNGINX Plusをインストールしたら、さっそく活用してみましょう。まず、いくつかのファイルとディレクトリを設定します。

  1. まだホームディレクトリにいない場合は、ホームディレクトリに移動します。以下の手順では、ホームディレクトリは「/home/ubuntu」です。
  2. 「public_html」というディレクトリを作成し、そのディレクトリに移動します。
  3. In the public_htmlディレクトリに、index.htmlというファイルと、application1というディレクトリを作成します。
  4. In the application1ディレクトリに、任意のテキストを含むapp1.htmlという名前のファイルを作成します。
  5. ホームディレクトリに戻ります。
  6. 「data」という名前のディレクトリを作成します。
  7. In the dataディレクトリ内に、imagesという名前のディレクトリを作成します。

ページと画像の配信

NGINXまたはNGINX Plusの最初のユースケースは、Webページを介してユーザーにページや画像を配信することです。

  1. ディレクトリを「/etc/nginx/conf.d」に変更します。
  2. Rename default.confの名前をdefault.conf.bakに変更し、NGINXまたはNGINX Plusがデフォルトの設定ファイルとして使用しないようにします。
  3. 次の設定を含むserver1.confという名前のファイルを作成します:
server {    root /home/ubuntu/public_html;

    location /application1 {  }

    location /images {		
        root /home/ubuntu/data;	
    }
}
  1. ディレクティブのドキュメント:location、root、server
  2. ディレクトリを「~/data/images」に変更します。
  3. 配信する画像を選び、ディレクトリ(~/data/images)にコピーします。例として、次のコマンドではNGINXロゴをコピーします。
$ curl -o NGINX-logo.png https://www.nginx.com/wp-content/uploads/2021/11/NGINX-logo-2020.png
  1. NGINXまたはNGINX Plusをリロードします:
$ sudo nginx -s reload
  1. Webブラウザで次のURLにアクセスして画像をリクエストします。NGINX-serverには、EC2インスタンスのパブリックIPアドレスを指定します:https://NGINX-server/images/NGINX-logo.png
  2. また、アプリケーションにアクセスし、表示される内容を確認します:https://NGINX-server/application1/app1.html

プロキシサーバーの設定

Webサーバーが稼働したら、次はトラフィックをルーティングするための設定方法を学びます。この機能により、トラフィックを他のサーバーに転送できるようになり、負荷分散の構成に向けて大きく前進します。以下の手順に従ってください。

  1. In the ~/dataディレクトリに、server2という名前のディレクトリを作成します。
  2. In the server2ディレクトリ内に、sampleAppという名前のディレクトリを作成します。
  3. In the sampleAppディレクトリに、任意のテキストを含むindex.htmlという名前のファイルを作成します。
  4. ディレクトリを「/etc/nginx/conf.d」に移動します。
  5. 次の設定内容で「server2.conf」というファイルを作成します:
server {    listen 8080;
    root /home/ubuntu/data/server2;
}
  1. ディレクティブのドキュメント:listen、root、server
  2. 最初の「server1.conf」のproxy_passブロックにlocationディレクティブを次のように追加して変更します。
server {    root /home/ubuntu/public_html;

    location /application1 {
        proxy_pass http://localhost:8080/sampleApp;
    }

    location /images {
        root /home/ubuntu/data;
    }
}
  1. ディレクティブのドキュメント:location、proxy_pass、root、server
  2. NGINXまたはNGINX Plusをリロードします:
$ sudo nginx -s reload
  1. ブラウザーで次のURLにアクセスし、ページと画像の配信でアクセスしたときから何が変わったかを確認します:https://NGINX-server/application1/index.html

以上で完了です。これで、NGINXを実行するUbuntuインスタンスが稼働し、プロキシサーバーとして使用できる状態になりました。

その他のユースケースでNGINXおよびNGINX PlusをAWSにデプロイする手順については、デプロイガイドをご覧ください。

まとめ

このチュートリアルでは、NGINXまたはNGINX Plusをセットアップして、インターネット経由でファイルや画像を配信し、リバースプロキシとして機能させる方法を説明しました。NGINXについてさらに詳しく学びたい方には、NGINX Coreトレーニングコース(講師によるトレーニングまたはオンデマンド)をご用意しています。このコースでは、このチュートリアルの内容に加え、ロードバランシング、ロケーションベースのルーティング、セキュリティなど、Web配信とアプリケーションデリバリに不可欠なトピックをさらに詳しく取り上げます。また、documentation at nginx.orgのドキュメントおよびNGINX Plus管理者ガイドもご覧ください。特に記載がない限り、各記事はNGINX Open SourceとNGINX Plusの両方に適用されます。


共有
タグ: F5 NGINX, 2021, Tech

関連するブログ記事

チュートリアル:NGINXを使用してアプリケーション向けにOpenTelemetryを構成する
NGINX | 2024/01/18

チュートリアル:NGINXを使用してアプリケーション向けにOpenTelemetryを構成する

OpenTelemetryを使用してNGINXサーバーの状態と健全性をより明確に把握することで、問題のトラブルシューティングを行い、Webアプリケーションのパフォーマンスを向上できます。

AkitaのNGINX Plus認定モジュールでAPIエンドポイントの問題を特定・修正
NGINX | 2023/05/31

AkitaのNGINX Plus認定モジュールでAPIエンドポイントの問題を特定・修正

Akita SoftwareのAPIオブザーバビリティ向け新しいNGINX Plus Certified Moduleを活用して、APIエンドポイントの問題をより迅速に特定し、修正できます。

JavaプロジェクトをスキャフォールディングしてKubernetesネイティブアプリを構築する方法
NGINX | 2023/02/09

JavaプロジェクトをスキャフォールディングしてKubernetesネイティブアプリを構築する方法

Red HatのシニアプリンシパルデベロッパーアドボケイトであるDaniel Oh氏が、Javaプロジェクトをゼロから構築するためのひな形を作成し、Kubernetesネイティブアプリケーションとしてビルドする方法を解説します。

F5 NGINXaaS for Azureのご紹介:Microsoft Azureでネイティブに利用できるSaaS型ロードバランシング
NGINX | 2022/05/24

F5 NGINXaaS for Azureのご紹介:Microsoft Azureでネイティブに利用できるSaaS型ロードバランシング

NGINXaaS for Azureは、NGINX PlusをAzureネイティブのSaaSとして利用できるサービスです。NGINXの設定を容易にリフト&シフトできるため、クラウド導入とモダンアプリの展開を加速できます。

SELinuxでNGINXおよびNGINX Plusを使用する
NGINX | 2018/08/17

SELinuxでNGINXおよびNGINX Plusを使用する

Red Hat Enterprise Linux(RHEL)および関連ディストリビューションでSecurity-Enhanced Linux(SELinux)を有効にすると、デフォルト設定によりNGINXとNGINX Plusの一部の操作が制限されます。この記事では、すべての機能を利用できるようにSELinuxの設定を変更する方法について説明します。

NGINX PlusによるAWS Auto Scalingグループの負荷分散
NGINX | 2017/03/06

NGINX PlusによるAWS Auto Scalingグループの負荷分散

新しいnginx-asg-sync統合ソフトウェアにより、NGINX PlusはAWS Auto Scalingグループの負荷を直接分散できるため、クラウドでの負荷分散がさらに柔軟になります