はじめに
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
が処理方法を認識しているアプリケーション構成を表示します。
アプリケーションプロファイルの一覧が表示されます。
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'
次のように入力して、変更を確認できます。
許可された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システムでサービスが実行されていることを確認できます。
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ツールを使用すれば分かります。
サーバーのIPアドレスが分かったら、ブラウザのアドレスバーに入力します。
http://your_server_ip
デフォルトの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
+X
→Y
→Enter
を押してファイルを保存して閉じます。
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_domain
とwww.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ファイルに構文エラーがないことをテストして確認します。
問題なければ、Nginxを再起動して変更を有効にします。
- sudo systemctl restart nginx
これで、Nginxがドメイン名を提供しているはずです。 これをテストするには、http://your_domain
に移動します。次のように表示されます。
ステップ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 スタック)をインストールする方法をご 覧ください。