序章

Nginx は、世界で最も人気のあるWebサーバーの1つであり、インターネット上で最大かつ最もトラフィックの多いサイトのいくつかをホストする責任があります。 ほとんどの場合、Apacheよりもリソースに優しく、Webサーバーまたはリバースプロキシとして使用できます。

このガイドでは、Debian10サーバーにNginxをインストールする方法について説明します。

前提条件

このガイドを開始する前に、サーバーとアクティブなファイアウォールにsudo権限が設定されたroot以外の通常のユーザーが必要です。 これらの設定方法については、Debian10初期サーバー設定ガイドに従ってください。

利用可能なアカウントがある場合は、root以外のユーザーとしてログインして開始します。

ステップ1-Nginxをインストールする

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

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

  1. sudo apt update

これで、nginxをインストールできます。

  1. sudo apt install nginx

インストールの確認を求められたら、Enterを押して続行します。 その後、aptはNginxと必要な依存関係をサーバーにインストールします。

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

Nginxをテストする前に、サービスへのアクセスを許可するようにファイアウォールソフトウェアを調整する必要があります。

ufwが操作方法を知っているアプリケーション構成を、次のように入力して一覧表示します。

  1. sudo ufw app list

アプリケーションプロファイルのリストを取得する必要があります。

Output
Available applications: ... Nginx Full Nginx HTTP Nginx HTTPS ...

ご覧のとおり、Nginxで使用できるプロファイルは3つあります。

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

構成したトラフィックを引き続き許可する最も制限の厳しいプロファイルを有効にすることをお勧めします。 このガイドではまだサーバーのSSLを構成していないため、ポート80でHTTPのトラフィックのみを許可する必要があります。

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

  1. sudo ufw allow 'Nginx HTTP'

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

  1. 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サーバーを確認する

インストールプロセスの最後に、Debian10はNginxを起動します。 Webサーバーはすでに稼働しているはずです。

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

  1. 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 Wed 2019-07-03 12:52:54 UTC; 4min 23s ago Docs: man:nginx(8) Main PID: 3942 (nginx) Tasks: 3 (limit: 4719) Memory: 6.1M CGroup: /system.slice/nginx.service ├─3942 nginx: master process /usr/sbin/nginx -g daemon on; master_process on; ├─3943 nginx: worker process └─3944 nginx: worker process

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

サーバーのIPアドレスに移動すると、デフォルトのNginxランディングページにアクセスして、ソフトウェアが正しく実行されていることを確認できます。 サーバーのIPアドレスがわからない場合は、サーバーのコマンドプロンプトで次のように入力してみてください。

  1. ip addr show eth0 | grep inet | awk '{ print $2; }' | sed 's/\/.*$//'

数行戻ります。 Webブラウザーでそれぞれを試して、機能するかどうかを確認できます。

サーバーのIPアドレスを取得したら、それをブラウザのアドレスバーに入力します。

http://your_server_ip

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

Nginx default page

このページは、サーバーが正しく実行されていることを示すためにNginxに含まれています。

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

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

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

  1. sudo systemctl stop nginx

停止時にWebサーバーを起動するには、次のように入力します。

  1. sudo systemctl start nginx

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

  1. sudo systemctl restart nginx

単に構成を変更するだけの場合、Nginxは接続を切断せずにリロードできることがよくあります。 これを行うには、次のように入力します。

  1. sudo systemctl reload nginx

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

  1. sudo systemctl disable nginx

起動時にサービスを再度有効にするには、次のように入力します。

  1. sudo systemctl enable nginx

ステップ5–サーバーブロックの設定

Nginx Webサーバーを使用する場合、サーバーブロック(Apacheの仮想ホストと同様)を使用して、構成の詳細をカプセル化し、単一のサーバーで複数のドメインをホストできます。 your_domainというドメインを設定します。 DigitalOceanを使用したドメイン名の設定の詳細については、 DigitalOceanDNSの概要を参照してください。

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

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

  1. sudo mkdir -p /var/www/your_domain/html

次に、$USER環境変数を使用してディレクトリの所有権を割り当てます。これにより、現在のシステムユーザーが参照されます。

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

umaskの値を変更していない場合は、Webルートのアクセス許可が正しいはずですが、次のように入力して確認できます。

  1. sudo chmod -R 755 /var/www/your_domain

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

  1. 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! Your Nginx server is successfully configured for <em>your_domain</em>. </h1>
<p>This is a sample page.</p>
    </body>
</html>

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

Nginxがこのコンテンツを提供するには、カスタムWebルートを指す正しいディレクティブを使用してサーバーブロックを作成する必要があります。 デフォルトの構成ファイルを直接変更する代わりに、/etc/nginx/sites-available/your_domainで新しい構成ファイルを作成しましょう。

  1. 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をドメイン名に更新したことに注意してください。

次に、sites-enabledディレクトリ内にカスタム構成ファイルへのシンボリックリンクを作成して、このサーバーブロックを有効にします。これは、Nginxが起動時に読み取ります。

  1. sudo ln -s /etc/nginx/sites-available/your_domain /etc/nginx/sites-enabled/

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

  • your_domainyour_domainおよびwww.your_domainのリクエストに応答します。
  • default:ポート80で、他の2つのブロックと一致しない要求に応答します。

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

  1. sudo nano /etc/nginx/nginx.conf

server_names_hash_bucket_sizeディレクティブを見つけ、#記号を削除して、行のコメントを解除します。

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

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

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

  1. sudo nginx -t

問題がない場合は、次の出力が表示されます。

Output
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful

構成テストに合格したら、Nginxを再起動して変更を有効にします。

  1. sudo systemctl restart nginx

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

Nginx 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:Nginxが別の方法で構成されていない限り、Webサーバーへのすべてのリクエストはこのログファイルに記録されます。
  • /var/log/nginx/error.log:Nginxエラーはすべてこのログに記録されます。

結論

Webサーバーがインストールされたので、提供できるコンテンツの種類と、ユーザーにより豊かなエクスペリエンスを作成するために使用できるテクノロジーについて、多くのオプションがあります。