もう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とほとんど同じですね。