いづいづブログ

アジャイルコーチになりたい札幌在住SEです。アジャイル札幌スタッフ&ScrumFestSapporo実行委員。Like:パクチー/激辛/牡蠣/猫/初期仏教

NginxでVirtual Hostに挑戦

f:id:izumii-19:20190428123747p:plain:w300

Nginxのインストールとりあえず自作のhtmlを表示させてみるというのをやってみてNginxがなんなのかがなんとなくわかってきたところで、今度はVirtual Hostで複数のサイトを立ち上げるのに挑戦してみます。

環境

さくらのVPSに作ったDebian9(stretch)

Virtual Hostとは

1つのサーバで複数のドメインを運用する技術のこと。Webサーバやメールサーバなどで利用される。

つまりVirtual Hostを使うと1つのIPで複数のサイトを運用できたりポートでサイトを分けたりすることができるのでいくつもサーバーを立てる必要がない。

ドメインの取得

webサイトを構築するにはドメインを取得する必要がある。今回はお名前.comで取得。有料だけど.workとかだと1円で取れる。

ネームサーバーに登録する

ドメインを取得したあとは、ドメインIPアドレスを紐付けるためにネームサーバー*1に登録する必要がある。

なぜドメインIPアドレスを紐付ける作業が必要かについてはここを読むとよい。

ちなみに今回のようにレンタルサーバーで独自ドメインを使用したい場合は両方での登録が必要になる。

  • お名前.comでネームサーバーの変更の設定
  • さくらVSPのネームサーバーの設定

ネームサーバーの登録は以下のサイトのとおりにやればOK。「手続きには〜72時間くらいかかります」と言われるが実際には1時間もしないで使えるようになった。

「さくらのVPS」に「お名前.com」で取得した独自ドメインを割り当てる手順 | 100%レンタルサーバーを使いこなすサイト

ネームサーバーへの登録がうまくいっているかどうかはnslookup コマンドで確認可能。

$ nslookup {ドメイン名}

f:id:izumii-19:20190429082641p:plain
登録されるとNameとAddressが返ってくる

Virtual Hostの設定

ここまではVirtual Hostを使用するための準備なので、ここからが実際にVirtual Hostを使用する手順となる。

今回は以下の2つのドメインを運用してみる。

  • izumii.work
  • nandeyanen.club

Virtual Host用のディレクトリ作成

この先は同じ手順を2回書くのが面倒なので、"izumii.work"を例に説明する。

まずVirtual Host用のディレクトリを作成する。今回は/home/demo/public_htmlに作成。

$ sudo mkdir /home/demo/public_html

この下に、さらに2つのドメイン用のサブディレクトリを作成。

$ sudo mkdir -p /home/demo/public_html/izumii.work/{public,private,log,backup}

index.htmlを配置

index.htmlを配置する。先程作ったドメイン毎のサブディレクトリ(のpublic)の下に配置。

$ sudo vim /home/demo/public_html/izumii.work/public/index.html

ここまでで表示させたいもの(index.html)とそれを置く場所の準備ができた!

Virtual Host用の設定ファイルを作成

vimで新しくizumii.work用の設定ファイルを新規作成する。sites-availableディレクトリを作成してそこに作る。

$ sudo vim /etc/nginx/sites-available/izumii.work

空のファイルが作成できたら、vimで開いて以下のように記述する。

server {
   listen 80;
   server_name www.izumii.work;
   access_log /home/demo/public_html/izumii.work/log/access.log;
   error_log /home/demo/public_html/izumii.work/log/error.log;
   location / {
        root /home/demo/public_html/izumii.work/public/;
        index index.html index.php;
        }
   }
server {
   listen 80;
   server_name izumii.work;
   access_log /home/demo/public_html/izumii.work/log/access.log;
   error_log /home/demo/public_html/izumii.work/log/error.log;
   location / {
        root /home/demo/public_html/izumii.work/public/;
        index index.html index.php;
        }
   }

※これをコピペして使う場合は先頭のスペースをタブかなんかに変換しないとエラーになります。注意!!!

Virtual Host用の設定ファイルの解説

ここで、今作った設定ファイルの中身を軽めに説明。

まず同じような設定を2つ書いているのは「www.izumii.work」と入力しても「izumii.work」と入力しても同じページを表示させるため。 次に記述してある内容はざっくり以下のとおり。

  • サーバー設定
    • izumii.workへの接続は80番ポートを使用。
    • サーバー名はwww.izumii.workまたはizumii.work
    • アクセスログの保存先
    • エラーログの保存先
    • rootファイルのありか
    • indexはindex.html index.php;のどっちか

設定ファイルをNginxが読み込めるようにする (1)

具体的にはsites-enabledディレクトリを作成し、さきほどsites-available内に作った設定ファイルへのシンボリックリンクを張る。

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

Nginxは、起動時に/etc/nginx/sites-enabledに入っている設定ファイルを読み込む。「だったらsites-enabledに直接設定ファイルおけばよくね?」と思われそうだが、そこにはおそらくちゃんと理由があると思う。今はとりあえずお約束なんだなという理解にとどめておく。

設定ファイルをNginxが読み込めるようにする (2)

Nginxが設定ファイル(nginx.conf) を読み込む際に/etc/nginx/sites-enabledも読み込むように設定する。

/etc/nginx/nginx.confを開き以下の1行を追加する。

include /etc/nginx/sites-enabled/*;

f:id:izumii-19:20190429094720p:plain
httpディレクティブに追加

ここまでの構成を確認

VirtualHostの設定はここまででおしまい。

で、こうなっているはず。(図がちょっとぐちゃぐちゃだけど勘弁)

/ ルートディレクト

├ /bin 一般ユーザー向けの基本コマンド

├ /etc 設定ファイル

|  ├ /nginx ←ここにNginxの実行ファイルがいる

|  ├ nginx.conf ←Nginxの設定ファイル

|   ├ /sites-available - izumii.work ←設定ファイル

|   ├ /sites-available - nandeyanen.club ←設定ファイル

|   ├ /sites-enable - izumii.work ←sites-availableへのシンボリックリンク

|   ├ /sites-enable - nandeyanen.club ←sites-availableへのシンボリックリンク

├ /home ユーザーのホームディレクト

| ├ /demo ←Virtual Host用ディレクト

|   ├ /public_html

|    ├ /izumii.work ←サブフォルダ

|     ├ /public - index.html ←トップページ

|     ├ /private

|     ├ /log

|     ├ /backup

|    ├ /nandeyanen.club ←サブフォルダ

|     ├ /public - index.html ←トップページ

|     ├ /private

|     ├ /log

|     ├ /backup

確認

設定を変えたので一度Nginxを終了してから起動する。

$ sudo /etc/init.d/nginx stop
$ sudo /etc/init.d/nginx start

izumii.workにアクセス

ブラウザで"izumii.work"と入力。表示された!

f:id:izumii-19:20190429095717p:plain:w400
 www.izumii.work

nandeyanen.clubにアクセス

ブラウザで"www.nandeyanen.club"と入力。wwwつきで入力してもちゃんと表示される。

f:id:izumii-19:20190429100041p:plain:w400
nandeyanen.club

とりあえずここまでで、自分でwebサーバーを構築し、ドメインの取得をして自作のwebサイトを立ち上げるところまでがひとりでできたことになります。

いやー勉強になった!

参考サイト

*1:DNSサーバーともいう。