UbuntuサーバーにNginxをインストールしよう

今日は前回作成した仮想マシンにインストールしたUbuntuサーバーにNginxをインストールしていきます。

仮想マシン(VirtualBox)にUbuntuサーバーをインストールする方法かこちらからどうぞ。

Nginxとは

Nginx(エンジンエックス)はApacheと同じで、世界で最も使われているウェブサーバーのうちの一つです。

Ngnixは、軽量で、大規模なウェブサイトにも使えるエンタープライズレベルのアプリケーションになります。

今日の目的

この記事では、Ubuntuサーバー22.04にNginxをインストールして、ファイヤーウォールの設定、Nginxののプロセスを管理、そしてサーバーブロックを設定する方法を説明します。

準備しておくこと

  • Ubuntuサーバーのある環境(今回はバージョン22.04)
  • Ubutnuユーザーのログイン情報
  • 必要に応じてドメインネームの取得

Nginxのインストール

NginxはUbuntuのデフォルトのリポジトリで取得可能なためそこから簡単にインストールできます。
今回はサーバーを設定したばかりなのでローカルパッケージをアップデートして最新のパッケージにアクセスできるようにしておきます。

sudo apt update
sudo apt install nginx

Nginxの際にDo you want to continue?と聞かれるのでY(イエスの意味)を入力してエンターします。

ファイヤーウォールの設定

Nignixをテストする前にファイヤーウォールのソフトウェアを設定してNginxがサービスにアクセスできるようにします。

先ほどNginxをインストールした際にNginx自体がサービスとしてufw(Uncomplicated Firewall)に登録されています。

まずは、ufwに登録されているアプリケーションを一覧で見てみましょう。

sudo ufw app list

アウトプットから見てわかるようにNginxから3つのプロフィールが作成されていることが分かります。

  • Nginx Full: ポート 80 (通常, 暗号化されていない)とポート 443 (TLS/SSL 暗号化されたトラフィック)
  • Nginx HTTP: ポート80だけ
  • Nginx HTTPS: ポート443だけ

今回はポート80しか使わないので下記のコマンドでポート80だけ開けておきます。もちろん、プロダクションの場合はHttps://を使うのでポート443を開けることになります。

sudo ufw allow 'Nginx HTTP'

このコマンドで、現在のステータスを確認しましょう。

sudo ufw status

もしStatusがinactiveとなっている場合はファイヤーフォールがアクティブになっていないのでこのコマンドでファイヤーオールを起動させます。

sudo ufw enable

再度ステータスを確認するとアクティブになっていることが分かり、HTTPのファイヤーウォールも設定されていることが分かりますね。

ウェブサーバーの設定

Nginxをインストールした時点で、自動でウェブサーバーが起動して使える状態になっているはずです。

念のために確認しておきましょう。

systemctl status nginx

アウトプットを見てわかるように、アクティブになっていることが分かります。

これでサーバーのIPアドレスにアクセスするとNginxのデフォルトのページが見れるはずです。

まずは、サーバーのIPアドレスを見つけましょう。

ifconfig

ifconfigのコマンドが使えない場合は、このコマンドでnet-toolをインストールしてくださいというメッセージが出ますね。インストールし再度ifconfigのコマンドを実行します。

sudo apt install net-tools

もしVirtualBoxを使っている人は仮想マシンのSettingからNetworkにいき、Bridged Adapterになっていることを確認しましょう。

使用しているネットワークのインターフェースにもよりますが、enp0s3の方のinetが192.168.0.186になっていることが分かります。loの方はローカルの方なので関係ないです。

もしレンタルサーバーとかを使っている方はパブリックIPが分かるはずなのでそれを自身のブラウザに入力します。

これで、Nginxが正しく起動されていることが分かりました。

Nginxのプロセスを管理する

では下記にNginxの基本のコマンドを記載します。必要に応じて使ってください。

ウェブサーバーをストップする

sudo systemctl stop nginx

ウェブサーバーを起動する

sudo systemctl start nginx

ウェブサーバーを再起動する

sudo systemctl restart nginx

ウェブサーバーをリロードする。

※この方法だとサーバーを落とさずにリロードできるのでユーザーがアクセスが途切れません。Nginxのコンフィグを変更したときとかに使います。

sudo systemctl reload nginx

Nginxを無効化する。※Nginxはインストールした時点で起動した状態になっています。これを止めたいときに使います。

sudo systemctl disable nginx

上記で無効化したNginxを有効にしたい場合に使います。

sudo systemctl enable nginx

サーバーブロックの設定をする

Apahceでいうバーチャルホストのことです。

それぞれのドメインごとにサーバーブロックを作成してコンフィグレーションをまとめたものになります。これを使用することで一つのサーバーから複数のウェブサイトをホスティングすることができます。

今回は例として、asameshiclub.comというドメインで設定してみます。ここは自身のドメイン名に変更してください。

Ubuntu 22.04のNginxはデフォルトで一つのサーバーブロックが設定された状態になっています。

その設定されたファイルパスが/var/www/htmlになります。

これが一つのサイトであれば問題ないのですが今後ドメインが増えることを想定すると/var/www直下にドメインの名前でディレクトリを作成してそれぞれのサイトごとで管理していくことがお勧めです。

では、下記のコマンドでディレクトリを作成します。-pフラグは必要であれば親フォルダを作成するという指示をしていることになります。

sudo mkdir -p /var/www/asameshiclub.com/html

次に、このディレクトリにユーザーの所有権を与えます。$USERは環境変数になります。

sudo chown -R $USER:$USER /var/www/asameshiclub.com/html

umaskを変更していない限り、デフォルトでウェブルーツのパーミッション(許可)の設定は’正しいはずですが、念のために確認しましょう。

ファイルのパーミッションは、Read(読み込み)、Write(書き込み)Excecate(実行)になっているはずです。

では下記のコマンドでこれらをインプットしていきます。

sudo chmod -R 755 /var/www/asameshiclub.com

次にテスト用で表示させるindex.htmlを作成します。

テキストエディターはnanoを使用しますがvimを使っている人はそれでもOKです。

nano /var/www/asameshiclub.com/html/index.html
<html>
    <head>
        <title>いらっしゃいませ</title>
    </head>
    <body>
        <h1>サーバーブロックのテストです。</h1>
    </body>
</html>

サンプルのHTMLページを作成したら、コントロールボタンとOを押してファイルをセーブします。エンターで保存。

コントロール+Xボタンでnanoのテキストエディタから抜け出します。

NginxがこのHTMLファイルを公開するには、サーバーブロックを作成する必要があります。

今回はデフォルトであるものを編集せずに新しいサーバーブロックを作成しましょう。

ファイルの場所は/etc/nginx/sites-available/asameshiclub.comになります。

sudo nano /etc/nginx/sites-available/asameshicode.com
server {
        listen 80;
        listen [::]:80;

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

        server_name asameshiclub.com www.asameshiclub.com 192.168.0.186;

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

ここで設定したrootコンフィグが新しいディレクトリになっていることに注目してください。またserver_nameも指定したドメインに変更されていますね。

もし、IPアドレスでアクセスしたい場合はここで指定してあげてください。

では、次にこのsites-availableで設定したファイルをsites-enabledにリンクしてNiginxがスタートしたときにこのサイトが読み込まれるようにします。

sudo ln -s /etc/nginx/sites-available/asameshiclub.com /etc/nginx/sites-enabled/

ポイント:Nginxではシンボリックリンクというテクニックを使ってサーバーブロックのファイルを実行するか設定するようにしています。同じではないですけどwindowsのショートカットに似たようなイメージになります。sitesenabledでは実際にデプロイしたいサイトのファイルをリンクさせ、内部で保管した状態にしておきたいものをsites-availableに残しておくようになります。

これで2つのサーバーブロックが設定されユーザーからのリクエストに応じてリスポンスをするようになります。

ここでサーバーネームを追加したことによりハッシュバケットメモリの問題が発生することを防ぐためにNginxのコンフィグを調整します。

sudo nano /etc/nginx/nginx.conf

色々なコンフィグレーションが表示されますが、下記の部分だけ編集してセーブしましょう。

パウンドキー#のコメントアウトを除くだけでOKです。

...
http {
    ...
    server_names_hash_bucket_size 64;
    ...
}
...

次に、Nginxのシンタックスエラーがないか試します。

sudo nginx -t

問題がなさそうなので、nginxのサービスをリスタートしましょう。

sudo systemctl restart nginx

ではasameshiclub.comもしくは自分で設定したドメインがブラウザから見れれば完成です。

購入したドメインはDNSサーバーの設定が必要になるので忘れずに。

IPでアクセスした場合はこんな感じです。

ではお疲れさまでした。

他にも参考になる動画があるので是非ご覧ください。