Ubuntu20.04にNginxをインストールする方法
序章
Nginx は、世界で最も人気のあるWebサーバーの1つであり、インターネット上で最大かつ最もトラフィックの多いサイトのいくつかをホストする責任があります。 これは、Webサーバーまたはリバースプロキシとして使用できる軽量の選択肢です。
このガイドでは、Ubuntu 20.04サーバーにNginxをインストールする方法、ファイアウォールを調整する方法、Nginxプロセスを管理する方法、単一のサーバーから複数のドメインをホストするためのサーバーブロックを設定する方法について説明します。
前提条件
このガイドを開始する前に、サーバーにsudo権限を持つ通常の非rootユーザーが設定されている必要があります。 Ubuntu 20.04 の初期サーバーセットアップガイドに従って、通常のユーザーアカウントを構成する方法を学ぶことができます。
また、このチュートリアルの最後の手順を完了する前に、オプションでドメイン名を登録しておくこともできます。 DigitalOceanを使用したドメイン名の設定の詳細については、DigitalOceanDNSの概要を参照してください。
利用可能なアカウントがある場合は、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
アプリケーションプロファイルのリストを取得する必要があります。
OutputAvailable 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トラフィックが示されます。
OutputStatus: active
To Action From
-- ------ ----
OpenSSH ALLOW Anywhere
Nginx HTTP ALLOW Anywhere
OpenSSH (v6) ALLOW Anywhere (v6)
Nginx HTTP (v6) ALLOW Anywhere (v6)
ステップ3–Webサーバーを確認する
インストールプロセスの最後に、Ubuntu20.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にページをリクエストすることです。
サーバーのIPアドレスに移動すると、デフォルトのNginxランディングページにアクセスして、ソフトウェアが正しく実行されていることを確認できます。 サーバーのIPアドレスがわからない場合は、 icanhazip.com ツールを使用して見つけることができます。このツールを使用すると、インターネット上の別の場所から受信したパブリックIPアドレスがわかります。
- curl -4 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サーバーを使用する場合、サーバーブロック(Apacheの仮想ホストと同様)を使用して、構成の詳細をカプセル化し、単一のサーバーから複数のドメインをホストできます。 your_domain というドメインを設定しますが、これを独自のドメイン名に置き換える必要があります。
Ubuntu 20.04のNginxでは、デフォルトで1つのサーバーブロックが有効になっており、/var/www/html
のディレクトリからドキュメントを提供するように構成されています。 これは単一のサイトではうまく機能しますが、複数のサイトをホストしている場合は扱いにくくなる可能性があります。 /var/www/html
を変更する代わりに、 your_domain サイトの/var/www
内にディレクトリ構造を作成し、/var/www/html
をデフォルトのディレクトリとして残します。クライアントリクエストが他のサイトと一致しません。
your_domain のディレクトリを次のように作成し、-p
フラグを使用して必要な親ディレクトリを作成します。
- sudo mkdir -p /var/www/your_domain/html
次に、$USER
環境変数を使用してディレクトリの所有権を割り当てます。
- sudo chown -R $USER:$USER /var/www/your_domain/html
umask
値を変更していない場合は、Webルートのアクセス許可が正しいはずです。これにより、デフォルトのファイルアクセス許可が設定されます。 アクセス許可が正しいことを確認し、所有者がファイルの読み取り、書き込み、および実行を許可し、グループなどに読み取りと実行のアクセス許可のみを付与するには、次のコマンドを入力できます。
- sudo chmod -R 755 /var/www/your_domain
次に、nano
またはお気に入りのエディターを使用して、サンプルのindex.html
ページを作成します。
- sudo nano /var/www/your_domain/html/index.html
内部に、次のサンプル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/sites-available/your_domain
で新しい設定ファイルを作成しましょう。
- sudo nano /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
をドメイン名に更新したことに注意してください。
次に、ファイルからsites-enabled
ディレクトリへのリンクを作成してファイルを有効にします。このディレクトリから、Nginxは起動時に読み取ります。
- sudo ln -s /etc/nginx/sites-available/your_domain /etc/nginx/sites-enabled/
注: Nginxは、シンボリックリンクまたはシンボリックリンクと呼ばれる一般的な方法を使用して、どのサーバーブロックが有効になっているかを追跡します。 シンボリックリンクの作成は、ディスク上にショートカットを作成するのと似ています。そのため、必要に応じて、サーバーブロックをsites-available
に保持したまま、後でsites-enabled
ディレクトリからショートカットを削除できます。
これで、2つのサーバーブロックが有効になり、listen
およびserver_name
ディレクティブに基づいてリクエストに応答するように構成されました(Nginxがこれらのディレクティブを処理する方法について詳しくは、こちらをご覧ください)。
your_domain
:your_domain
およびwww.your_domain
のリクエストに応答します。default
:他の2つのブロックと一致しないポート80の要求に応答します。
サーバー名を追加することで発生する可能性のあるハッシュバケットメモリの問題を回避するには、/etc/nginx/nginx.conf
ファイルの単一の値を調整する必要があります。 ファイルを開きます。
- sudo nano /etc/nginx/nginx.conf
server_names_hash_bucket_size
ディレクティブを見つけ、#
記号を削除して、行のコメントを解除します。 nanoを使用している場合は、CTRL
およびw
を押すと、ファイル内の単語をすばやく検索できます。
注:コードの行をコメントアウトする(通常は行の先頭に#
を付ける)ことは、実際に削除せずに無効にするもう1つの方法です。 多くの構成ファイルには、アクティブなコードとドキュメントを切り替えることで有効または無効にできるように、コメントアウトされた複数のオプションが付属しています。
...
http {
...
server_names_hash_bucket_size 64;
...
}
...
終了したら、ファイルを保存して閉じます。
次に、テストして、Nginxファイルのいずれにも構文エラーがないことを確認します。
- sudo nginx -t
問題がない場合は、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
:Nginxが別の方法で構成されていない限り、Webサーバーへのすべてのリクエストはこのログファイルに記録されます。/var/log/nginx/error.log
:Nginxエラーはすべてこのログに記録されます。
結論
Webサーバーがインストールされたので、提供するコンテンツのタイプと、より豊かなエクスペリエンスを作成するために使用するテクノロジーについて、多くのオプションがあります。
より完全なアプリケーションスタックを構築したい場合は、記事 Ubuntu 20.04 にLinux、Nginx、MySQL、PHP(LEMPスタック)をインストールする方法を確認してください。
Let’s Encrypt を使用して無料のSSL証明書でドメイン名のHTTPSを設定するには、 Ubuntu20.04でLet’sEncryptを使用してNginxを保護する方法に進む必要があります。