UbuntuにNginxをインストールしてWebサーバー構築【マルチドメイン】

UbuntuにNginxをインストールしてWebサーバー構築【マルチドメイン】 サーバー

もうApacheの時代は終わりました。
これからは、Nginxの時代です。

というわけで、NginxでWebサーバーを構築していきます。
今回は、単純にインストールするだけではありません。
インストールに加えて、マルチドメインでサイトを公開できるようにします。

本記事の内容

  • ApacheではなくNginxでWebサーバーを構築する
  • NginxでWebサーバーを構築する環境
  • UbuntuにNginxのインストール
  • Nginxのインストール後のファイアウォール設定
  • Nginxで構築したWebサーバーの確認
  • Nginxのマルチドメイン対応

それでは、上記に沿ってNginxによるWebサーバー構築を解説していきます。

ApacheではなくNginxでWebサーバーを構築する

みなさんは、Apache世代ですか?
それともNginx世代でしょうか?

私は、バリバリのApache世代でした。
しかし、今後はNginxに乗り換えます。

ApacheからNginxへ乗り換えることになった契機については、次の記事でまとめています。

ということで、NginxでWebサーバーを構築していきます。

NginxでWebサーバーを構築する環境

まずは、NginxでWebサーバーを構築する環境についての確認からです。

  • Ubuntu 18.04
  • Nginx 1.14.0

今なら、Ubuntu 20.04 LTSをインストール可能でしょう。
ただ、私が契約したVPSでは、Ubuntu 18.04までしか利用可能ではありませんでした。
契約した際の過程などは、次の記事でまとめています。

と言っても、Ubuntu 18.04であろうとUbuntu 20.04であろうとどちらでも問題ありません。
Windowsと違って、LinuxはそれほどOSのバージョン違いの影響を受けません。
そのようなところが、サーバーとして利用されるメリットでもあるのでしょう。

UbuntuにNginxのインストール

Nginxに限らず、インストールの際にはパッケージ一覧を更新しておきましょう。

$ sudo apt update

まず、すでにインストールされているかどうかを確認します。

$ sudo apt list --installed -a nginx
一覧表示... 完了

インストールされていませんね。
では、Nginxをインストールします。

$ sudo apt install nginx

インストールは、次の表示で完了しました。

~
systemd (237-3ubuntu10.41) のトリガを処理しています ...
man-db (2.8.3-2ubuntu0.1) のトリガを処理しています ...
ufw (0.36-0ubuntu0.18.04.1) のトリガを処理しています ...
ureadahead (0.100.0-21) のトリガを処理しています ...
libc-bin (2.27-3ubuntu1.2) のトリガを処理しています ...

しかし、これでは成功したのかエラーで失敗したのかすら不明です。
少し不親切ですね。。。
とりあえず、インストール状況を確認しましょう。

$ sudo apt list --installed -a nginx                                                                                                    一覧表示... 完了
nginx/bionic-updates,bionic-security,now 1.14.0-0ubuntu1.7 all [インストール済み]
nginx/bionic 1.14.0-0ubuntu1 all

インストールは成功しているようです。
念のため、次のコマンドでnginxのバージョンを確認しておきましょう。

$ nginx -V
nginx version: nginx/1.14.0 (Ubuntu)

ここまで確認できれば、文句なくNginxのインストールは成功しているはず。
では、次はファイアウォールの設定を行います。

Nginxのインストール後のファイアウォール設定

Webサーバーである以上は、外部に公開する必要があります。
80・443ポートの開放を行う必要があるということです。
そのため、ファイアウォールの設定を行います。

ファイアウォールの設定は、ufw(Uncomplicated FireWall)を利用します。
もし、ufwをインストールしていない・未使用・未設定であれば、次の記事をご覧ください。
最後の「ファイアウォールの設定」で詳しく説明しています。

まずは、ufwで利用可能なアプリケーションかどうかを確認します。

$ sudo ufw app list
利用可能なアプリケーション:
  Nginx Full
  Nginx HTTP
  Nginx HTTPS
  OpenSSH
  Squid

Nginxをインストールした時点で、以下の3つが追加されます。

  •   Nginx Full
  •   Nginx HTTP
  •   Nginx HTTPS

それぞれの意味は、以下。

Nginx Fullポート80(http)とポート443(https)の両方が対象
Nginx HTTPポート80(http)が対象
Nginx HTTPSポート443(https)が対象

Nginx Fullを有効にすれば、Nginx HTTPとNginx HTTPSを有効にしたことになります。
よほどの事情がなければ、Nginx Fullを有効にするだけで問題ありません。

Nginx Fullを有効にする前に、現時点のポートの開放状態を確認しておきます。

$ sudo ufw status
状態: アクティブ


To                         Action      From
--                         ------      ----
22                         ALLOW       Anywhere                  
3128                       ALLOW       Anywhere                  
22 (v6)                    ALLOW       Anywhere (v6)             
3128 (v6)                  ALLOW       Anywhere (v6)   

SSH(ポート22)以外には、Squidのポート3128が開放されている状態です。
Squidはプロキシサーバー構築の際に開放したポートになります。
プロキシサーバー構築に関しては、以下の記事で解説しています。

それでは、Nginx Fullを有効にします。
ただし、いきなりはやらないでください。

$ sudo ufw allow 'Nginx Full'

これで何も問題ありません。
しかし、私はufwでのポート管理は番号しています。

そのため、実際には次のコマンドでポートを開放しています。

$ sudo ufw allow 80                                                                                                                                              
ルールを追加しました
ルールを追加しました (v6)
$ sudo ufw allow 443                                                                                                                                             
ルールを追加しました
ルールを追加しました (v6)

これは、完全に好みの問題です。
私は、番号で確認したいので番号で登録しています。

最後に、ポートの状況を確認しておきます。

$ sudo ufw status
状態: アクティブ


To                         Action      From
--                         ------      ----
22                         ALLOW       Anywhere                  
3128                       ALLOW       Anywhere                  
80                         ALLOW       Anywhere                  
443                        ALLOW       Anywhere                  
22 (v6)                    ALLOW       Anywhere (v6)             
3128 (v6)                  ALLOW       Anywhere (v6)             
80 (v6)                    ALLOW       Anywhere (v6)             
443 (v6)                   ALLOW       Anywhere (v6)      

80と443が追加されていることを確認できました。
ファイアウォール設定は、これで完了です。

Nginxで構築したWebサーバーの確認

要するに、ブラウザでアクセスできるかどうかを確認します。

そのためには、まずインストールしたNginxが起動していることが前提です。
次のコマンドにより、 Nginxの起動状況を確認できます。

$ systemctl is-active nginx                              
active

インストールした時点で、自動的に起動しているということですね。
起動していれば、ブラウザで確認可能なはずです。

同じマシン上にインストールしていれば、次のURLでアクセスします。
http://localhost/

しかし、通常はリモートサーバーにインストールしているはずです。
よって、そのサーバーのIPアドレスを次のようにアドレスバーに入力します。

http://○.○.○.○

アクセスして以下の画面であれば、Webサーバーの確認をできます。

Nginxのマルチドメイン対応

Webサーバー構築だけであれば、これ以上は不要かもしれません。
しかし、実際にWebサーバーを運用していく上でマルチドメイン対応は欠かせないです。

マルチドメインという表現は、いろいろ言い方がされますね。

  • 一つのサーバ(IPアドレス)で複数ドメインの運用
  • バーチャルホスト
  • 複数ドメイン

いろいろと表現方法はありますが、1つのサーバー上で複数ドメインを運用することです。
これを実現するには、少し手間がかかります。

手間と言っても、Nginxではたいしたことではありません。
理解してしまえば、簡単なことです。
作業的には以下のモノですね。

  • 設定ファイルの作成・設置
  • 設定ファイルの反映
  • ルートディレクトリの作成とindex.htmlの設置
  • ブラウザによる確認

設定ファイルの作成・設置

まずは、デフォルトドメインの設定ファイルを確認します。
/etc/nginx/sites-available/default

このファイルには、IPアドレスによりアクセスした先の設定記載されています。
そして、このファイルの末尾には次の記載があります。

# Virtual Host configuration for example.com                                                                                                                                      
#                                                                                                                                                                                 
# You can move that to a different file under sites-available/ and symlink that                                                                                                   
# to sites-enabled/ to enable it.                                                                                                                                                 
#                                                                                                                                                                                 
#server {                                                                                                                                                                         
#       listen 80;                                                                                                                                                                
#       listen [::]:80;                                                                                                                                                           
#                                                                                                                                                                                 
#       server_name example.com;                                                                                                                                                  
#                                                                                                                                                                                 
#       root /var/www/example.com;                                                                                                                                                
#       index index.html;                                                                                                                                                         
#                                                                                                                                                                                 
#       location / {                                                                                                                                                              
#               try_files $uri $uri/ =404;                                                                                                                                        
#       }                                                                                                                                                                         
#}

バーチャルホストの設定は、次のようにするべしと書かれています。

  • server {・・・}を記載したファイルを作成【ファイル名virtual_host.confとする】
  • virtual_host.confを/etc/nginx/sites-availableに設置
  • /etc/nginx/sites-enabled/直下にvirtual_host.confのシンボリックリンクを作成

もちろん、virtual_host.confの内容は各ドメイン毎に異なります。
では、実際にやってみましょう。

/etc/nginx/sites-available直下に以下の2つのファイルを作成します。

indigo1.conf

server {                                                                                                                                                                         
       listen 80;                                                                                                                                                                
       listen [::]:80;                                                                                                                                                           
                                                                                                                                                                                 
       server_name  indigo1.example.com ;                                                                                                                                                  
                                                                                                                                                                                 
       root /var/www/indigo1;                                                                                                                                                
       index index.html;                                                                                                                                                         
                                                                                                                                                                                 
       location / {                                                                                                                                                              
               try_files $uri $uri/ =404;                                                                                                                                        
       }                                                                                                                                                                         
}

indigo2.conf

server {                                                                                                                                                                         
       listen 80;                                                                                                                                                                
       listen [::]:80;                                                                                                                                                           
                                                                                                                                                                                 
       server_name  indigo2.example.com ;                                                                                                                                                  
                                                                                                                                                                                 
       root /var/www/indigo2;                                                                                                                                                
       index index.html;                                                                                                                                                         
                                                                                                                                                                                 
       location / {                                                                                                                                                              
               try_files $uri $uri/ =404;                                                                                                                                        
       }                                                                                                                                                                         
}

そして、次のコマンドでシンボリックリンクを作成します。

$ cd /etc/nginx/sites-enabled
$ sudo ln -s /etc/nginx/sites-available/indigo1.conf .
$ sudo ln -s /etc/nginx/sites-available/indigo2.conf .

確認しておきます。

$ ls -l
合計 0
lrwxrwxrwx 1 root root 34  9月  3 10:52 default -> /etc/nginx/sites-available/default
lrwxrwxrwx 1 root root 39  9月  3 14:15 indigo1.conf -> /etc/nginx/sites-available/indigo1.conf
lrwxrwxrwx 1 root root 39  9月  3 14:15 indigo2.conf -> /etc/nginx/sites-available/indigo2.conf

ちゃんとシンボリックリンクが貼られていますね。
では、次にこれを反映させます。

設定ファイルの反映

$ sudo systemctl restart nginx

正常に再起動できていれば、特に何も表示はされません。

ルートディレクトリの作成とindex.htmlの設置

先ほど作成したバーチャルホストの設定ファイルに記述したディレクトリを作成します。
各ドメインのルートディレクトリになります。

$ sudo mkdir /var/www/indigo1
$ sudo mkdir /var/www/indigo2

そして、それぞれのディレクトリに次のindex.htmlを設置します。

/var/www/indigo1/index.html

<html>
<body>
<h1>indigo1</h1>
</body>
</html>

/var/www/indigo2/index.html

<html>
<body>
<h1>indigo2</h1>
</body>
</html>

ブラウザによる確認

各ドメインにブラウザでアクセスします。
問題なければ、それぞれのindex.htmlが表示されるはずです。

http://indigo1.example.com/

http://indigo2.example.com/

これが確認できれば、Nginxのマルチドメイン対応が完了です。
Apacheとほとんど同じですね。

タイトルとURLをコピーしました