Tutorial

Ubuntu 20.04にNginxをインストールする方法

NginxUbuntuUbuntu 20.04

はじめに

Nginxは、世界で最も人気のあるWebサーバーの1つであり、インターネット上で最大かつ最もトラフィックの多いサイトのホスティングを担っています。リソースにやさしく、Webサーバーやリバースプロキシとして使用できます。

このガイドでは、Ubuntu 20.04サーバーにNginxをインストールさらにファイアウォールを調整、Nginxプロセスを管理し、サーバーブロックをセットアップして単一のサーバーから複数のドメインをホストする方法について説明します。

前提条件

このガイドを始める前に、サーバーにsudo権限を持つ通常のroot以外のユーザーが設定されている必要があります。通常のユーザーアカウントを設定する方法については、Ubuntu 20.04の初期サーバーセットアップガイドをご覧ください。

アカウントを使用できるようになったら、root以外のユーザーとしてログインして開始します。

ステップ1 - Nginxのインストール

NginxはUbuntuのデフォルトのリポジトリで利用できるため、aptパッケージングシステムを使用してこれらのリポジトリからインストールできます。

まずは、このセッションでのaptパッケージングシステムとの最初のやり取りであるため、最新のパッケージ一覧にアクセスできるようにローカルパッケージインデックスを更新します。その後、nginxをインストールできます。

  • sudo apt update
  • sudo apt install nginx

インストール手順を承認すると、aptはNginxと必要な依存関係をサーバーにインストールします。

ステップ2 – ファイアウォールの調整

Nginxをテストする前に、ファイアウォールソフトウェアを調整して、サービスへのアクセスを許可する必要があります。Nginxは、インストール時に自身をサービスとしてufwに登録するため、Nginxへのアクセスが容易になります。

次のように入力して、ufw が処理方法を認識しているアプリケーション構成を表示します。

  • sudo ufw app list

アプリケーションプロファイルの一覧が表示されます。

Output
Available applications: Nginx Full Nginx HTTP Nginx HTTPS OpenSSH

ご覧のとおり、Nginxには3つのプロファイルがあります。

  • Nginx Full: このプロファイルは、ポート80(通常の暗号化されていないWebトラフィック)とポート443(TLS/SSL暗号化トラフィック)の両方を開きます。
  • Nginx HTTP: このプロファイルは、ポート80(通常の暗号化されていないWebトラフィック)のみを開きます。
  • Nginx HTTPS: このプロファイルは、ポート443 (TLS/SSL暗号化トラフィック)のみを開きます。

設定したトラフィックを許可しながら、最も制限の厳しいプロファイルを有効にすることをお勧めします。現時点では、ポート80のトラフィックのみを許可すればよいでしょう。

これを有効にするには、次のように入力します。

  • sudo ufw allow 'Nginx HTTP'

次のように入力して、変更を確認できます。

  • sudo ufw status

許可されたHTTPトラフィックが出力表示されます。

Output
Status: active To Action From -- ------ ---- OpenSSH ALLOW Anywhere Nginx HTTP ALLOW Anywhere OpenSSH (v6) ALLOW Anywhere (v6) Nginx HTTP (v6) ALLOW Anywhere (v6)

ステップ3 – Webサーバーの確認

インストールプロセスの最後に、Ubuntu 20.04がNginxを起動します。Webサーバーは既に稼働している必要があります。

次のように入力して、systemd initシステムでサービスが実行されていることを確認できます。

  • systemctl status nginx
Output
● nginx.service - A high performance web server and a reverse proxy server Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled) Active: active (running) since Fri 2020-04-20 16:08:19 UTC; 3 days ago Docs: man:nginx(8) Main PID: 2369 (nginx) Tasks: 2 (limit: 1153) Memory: 3.5M CGroup: /system.slice/nginx.service ├─2369 nginx: master process /usr/sbin/nginx -g daemon on; master_process on; └─2380 nginx: worker process

上記を見ると分かるように、サービスは正常に開始されています。 ただし、これをテストする最良の方法は、実際にNginxからページをリクエストすることです。

デフォルトのNginxランディングページにアクセスして、ソフトウェアがサーバーのIPアドレスを介して適切に実行されていることを確認できます。 サーバーのIPアドレスが分からない場合は、インターネット上の別の場所から見たパブリックIPアドレスが得られる、icanhazip.comツールを使用すれば分かります。

  • curl -4 icanhazip.com

サーバーのIPアドレスが分かったら、ブラウザのアドレスバーに入力します。

http://your_server_ip

デフォルトのNginxランディングページが表示されます。

Nginxデフォルトページ

このページが表示されれば、サーバーは正しく稼働し、管理可能な状態です。

ステップ4 – Nginxプロセスの管理

Webサーバーが稼働しているので、基本的な管理コマンドをいくつか見てみましょう。

Webサーバーを停止するには、次を入力します。

  • sudo systemctl stop nginx

Webサーバーが停止したときに起動するには、次のように入力します。

  • sudo systemctl start nginx

サービスを停止してから再び開始するには、次のように入力します。

  • sudo systemctl restart nginx

設定を変更するだけなら、Nginxは接続を切断せずにリロードできます。 これを行うには、次を入力します。

  • sudo systemctl reload nginx

デフォルトでは、Nginxはサーバーの起動時に自動的に起動するように設定されています。 これを望まない場合は、次のように入力してこの動作を無効にできます。

  • sudo systemctl disable nginx

ブート時に起動するサービスを再度有効にするには、次を入力できます。

  • sudo systemctl enable nginx

これで、基本的な管理コマンドを習得し、サイトを設定して複数のドメインをホストする準備ができました。

ステップ5 – サーバーブロックのセットアップ (推奨)

Nginx Webサーバーを使用する場合、server blocks(Apacheの仮想ホストに類似)を使用して設定の詳細をカプセル化し、単一サーバーから複数のドメインをホストできます。your_domainというドメインを設定しますが、これを自分のドメイン名に置き換える必要があります。DigitalOceanを使用したドメイン名の設定の詳細については、DigitalOcean DNSの紹介をご覧ください。

Ubuntu 20.04のNginxには、デフォルトで有効になっているサーバーブロックが1つあり、/var/ www/html のディレクトリからドキュメントを提供するように設定されています。 これは単一のサイトではうまく機能しますが、複数のサイトをホストしている場合は扱いにくいことがあります。/var/www/htmlを変更する代わりに、クライアントの要求が他のサイトと一致しない場合に提供される/var/www/htmlをデフォルトディレクトリのまま置いておき、your_domainサイトの/var/www内にディレクトリ構造を作成しましょう。

-pフラグを使用して必要な親ディレクトリを作成し、次のようにyour_domainのディレクトリを作成します。

  • sudo mkdir -p /var/www/your_domain/html

次に、$USER環境変数を使用してディレクトリの所有権を割り当てます。

  • sudo chown -R $USER:$USER /var/www/your_domain/html

デフォルトのファイルパーミッションを設定するumaskの値を変更していなければ、 rootの権限は正しいはずです。正しいパーミッションを確実に設定し、所有者には読み取り・書き込み・実行可能権限を、グループには読み取り・実行可能権限のみをそれぞれ付与するには、次のコマンドを入力します。

  • sudo chmod -R 755 /var/www/your_domain

次に、nanoまたはお気に入りのエディタを使用して、サンプルindex.htmlページを作成します。

  • nano /var/www/your_domain/html/index.html

内部に次のサンプルHTMLを追加します。

/var/www/your_domain/html/index.html
<html>
    <head>
        <title>Welcome to your_domain!</title>
    </head>
    <body>
        <h1>Success!  The your_domain server block is working!</h1>
    </body>
</html>

完了したら、CTRL+XYEnterを押してファイルを保存して閉じます。

Nginxがこのコンテンツを提供するには、正しいディレクティブでサーバーブロックを作成する必要があります。デフォルトの設定ファイルを直接変更する代わりに、/etc/nginx/site-able/your_domain > で新しい設定ファイルを作成しましょう。

  • sudo nano /etc/nginx/sites-available/your_domain

次の構成ブロックに貼り付けます。これはデフォルトに似ていますが、新しいディレクトリとドメイン名に合わせて更新されています。

/etc/nginx/sites-available/your_domain
server {
        listen 80;
        listen [::]:80;

        root /var/www/your_domain/html;
        index index.html index.htm index.nginx-debian.html;

        server_name your_domain www.your_domain;

        location / {
                try_files $uri $uri/ =404;
        }
}

root設定を新しいディレクトリに更新し、server_nameをドメイン名に更新したことに注意してください。

次に、Nginxが起動時に読み取るsites-enabledディレクトリにリンクを作成して、ファイルを有効にします。

  • sudo ln -s /etc/nginx/sites-available/your_domain /etc/nginx/sites-enabled/

2つのサーバーブロックが有効になり、listenおよびserver_nameディレクティブに基づいてリクエストに対応するように構成されました(Nginxがこれらのディレクティブを処理する方法の詳細についてはこちら

  • your_domain: your_domainwww.your_domainのリクエストに応答します。
  • デフォルト: 他の2つのブロックと一致しないポート80のリクエストに応答します。

サーバー名を追加することで発生する可能性があるハッシュバケットメモリの問題を回避するために、/etc/nginx/nginx.confファイル内で値を1か所調整する必要があります。ファイルを開きます。

  • sudo nano /etc/nginx/nginx.conf

server_names_hash_bucket_sizeディレクティブを見つけ、#シンボルを削除して行のコメントを外します。nanoを使用している場合は、CTRL+wキーを押して、ファイル内の単語を簡単に検索できます。

/etc/nginx/nginx.conf
...
http {
    ...
    server_names_hash_bucket_size 64;
    ...
}
...

完了したら、ファイルを保存して閉じます。

次に、Nginxファイルに構文エラーがないことをテストして確認します。

  • sudo nginx -t

問題なければ、Nginxを再起動して変更を有効にします。

  • sudo systemctl restart nginx

これで、Nginxがドメイン名を提供しているはずです。 これをテストするには、http://your_domainに移動します。次のように表示されます。

Nginx first server block

ステップ6 – 重要なNginxファイルとディレクトリに精通する

Nginxサービス自体の管理方法が分かったところで、いくつかの重要なディレクトリとファイルに慣れるために少しみてみましょう。

コンテンツ

  • /var/www/html: 実際のWebコンテンツは、デフォルトでは先ほど見た既定のNginxページのみで構成され、/var/www/htmlディレクトリから提供されます。 これは、Nginx設定ファイルを変更することで変更できます。

サーバーの設定

  • /etc/nginx: Nginx設定ディレクトリ。すべてのNginx設定ファイルはここにあります。
  • /etc/nginx/nginx.conf: Nginxのメイン設定ファイル。 これを変更して、Nginxのグローバル設定を変更できます。
  • /etc/nginx/sites-available/: サイトごとのサーバーブロックを保存できるディレクトリ。Nginxは、sites-enabledディレクトリにリンクされていない限り、このディレクトリにある設定ファイルを使用しません。通常、すべてのサーバーブロック設定はこのディレクトリで行われ、他のディレクトリにリンクすることで有効になります。
  • /etc/nginx/sites-enabled/: 有効なサイトごとのサーバーブロックが保存されるディレクトリ。 通常、これらはsites-availableディレクトリにある設定ファイルにリンクすることにより作成されます。
  • /etc/nginx/snippets: このディレクトリには、Nginx設定の他の場所に含めることができる設定フラグメントが含まれています。潜在的に反復可能な構成セグメントは、スニペットにリファクタリングするための良い候補です。

サーバーログ

  • /var/log/nginx/access.log: Webサーバーへのすべてのリクエストは、Nginxが別の方法で設定されていない限り、このログファイルに記録されます。
  • /var/log/nginx/error.log: Nginxエラーはすべてこのログに記録されます。

まとめ

Webサーバーがインストールされたので、提供できるコンテンツの種類や、より豊かなエクスペリエンスを生み出すために利用できる技術について、たくさんの選択肢ができました。

より完全なアプリケーションスタックを構築する場合は、Ubuntu 20.04 にLinux、Nginx、MySQL、PHP (LEMP スタック)をインストールする方法をご 覧ください。

Creative Commons License