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

Ubuntu 20.04 LTSのデスクトップ版とサーバーCLI版で「NginxWebサーバー」をインストールする方法を分かりやすく解説します。

Nginxのインストール

NginxはUbuntuのデフォルトのリポジトリで利用できるため、aptを使用してインストールできます。

sudo apt update
sudo apt install nginx

ファイアウォールがある場合は下の記事で設定方法を確認しましょう。

https://servg-memo.net/linux-ufw/

Nginxが起動しているか確認

「Active: active」となっていれば大丈夫です。

systemctl status nginx
● 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 Thu 2021-08-19 02:51:48 JST; 13h ago
       Docs: man:nginx(8)
    Process: 1562866 ExecStartPre=/usr/sbin/nginx -t -q -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
    Process: 1562869 ExecStart=/usr/sbin/nginx -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
   Main PID: 1562870 (nginx)
      Tasks: 9 (limit: 9447)
     Memory: 49.3M
     CGroup: /system.slice/nginx.service
             ├─1562870 nginx: master process /usr/sbin/nginx -g daemon on; master_process on;
             ├─1562871 nginx: worker process
             ├─1562872 nginx: worker process
             ├─1562873 nginx: worker process
             ├─1562874 nginx: worker process
             ├─1562875 nginx: worker process
             ├─1562876 nginx: worker process
             ├─1562877 nginx: worker process
             └─1562878 nginx: worker process

Aug 19 02:51:48 mgserver systemd[1]: Starting A high performance web server and a reverse proxy server...
Aug 19 02:51:48 mgserver systemd[1]: Started A high performance web server and a reverse proxy server.

起動していなければ、以下のコマンドを実行してください。

sudo systemctl enable --now nginx
sudo systemctl start nginx

# Statusの確認
sudo systemctl status nginx

Nginxを設定する

Nginxをインストールすると標準でサイトに「Welcome to Nginx!」みたいのなのが記述されたHTMLがあります。
このサイトのディレクトリ設定やドメインごとの設定などは全て「/etc/nginx」ディレクトリにある「.conf」ファイルで行います。

今回は、例として以下の設定で行います。

  • ドメイン:servg.work
  • サイトディレクトリ:/var/www/servg.work/html
  • インデックス:index.html
  • HTTPS:なし

各ドメイン専用のディレクトリを作成する

今回は、ほかのドメインからは接続されないようにあえて「/var/www/html」ディレクトリには作成しません。

sudo mkdir /var/www/servg.work
sudo mkidir /var/www/servg.work/html

ディレクトリの所有権を変更する

Nginxでは、「www-data」に所有権を変更しておかないと読み込めない状態になるときがあります。

# 所有権変更
sudo chown -R www-data:www-data /var/www/servg.work

# パーミッション変更 
# ※所有者には読み取り・書き込み・実行可能権限を、グループには読み取り・実行可能権限のみ
sudo chmod -R 755 /var/www/servg.work

サンプルindex.htmlを追加する。

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

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

完了したら、「CTRL+X」→「Y」→「Enter」を押してファイルを保存して終了します。

Nginxにバーチャルホストを設定する

ドメインによりサーバーにアクセスが来た時に、そのドメインに対しての処理を設定していきます。

Nginxは基本的に「site-available」ディレクトリにドメインのコンフィグファイルを作成し「site-enabled」ディレクトリにリンクされたコンフィグファイルを読み取り、実行します。
※拡張子などはなくてもテキストファイルとして読み取れればそれはコンフィグファイルになります。
※Nginxではバーチャルホストの有効化・無効化をディレクトリにあるか・ないかで判断するのでリンクして作成する方法をおすすめします。

sudo nano /etc/nginx/sites-available/servg.work
server {
        # HTTP Port 80を使用し、IPv6での接続もできるようにする
        listen 80;
        listen [::]:80;

        # ディレクトリ
        root /var/www/servg.work/html;

        # インデックス
        index index.html;

        # ドメイン
        server_name servg.work;

        # URLにて指定されたファイルが見つからなかったときのエラー404の設定
        location / {
                try_files $uri $uri/ =404;
        }
}

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

sudo ln -s /etc/nginx/sites-available/servg.work /etc/nginx/sites-enabled/

Nginxに問題がないか確認

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

sudo nginx -t

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

「successful」が出れば問題ありません。

Nginxを再起動

Nginxを再起動して変更を適用します。

sudo systemctl restart nginx

これで完了です。サーバーと同じネットワークをを使用している場合はスマホなどの別回線を利用してサイトにアクセスしてみてください。
ちなみに私は、設定通りだと http://servg.work に接続すると下のような画面になります。

メモ

  • /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/ : Nginxのログのすべてがある。
  • /var/www/html : どんなドメインも設定されていなければこのディレクトリを参照する