NginxでVirtual Hostに挑戦
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 {ドメイン名}
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
$ 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」と入力しても同じページを表示させるため。 次に記述してある内容はざっくり以下のとおり。
設定ファイルを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/*;
ここまでの構成を確認
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"と入力。表示された!
nandeyanen.clubにアクセス
ブラウザで"www.nandeyanen.club"と入力。wwwつきで入力してもちゃんと表示される。
とりあえずここまでで、自分でwebサーバーを構築し、ドメインの取得をして自作のwebサイトを立ち上げるところまでがひとりでできたことになります。
いやー勉強になった!
参考サイト
sites-availableとsites-enabledの関連
手順 プログラミングビギナーNekoteniがあなたに贈る!NginxでVirtual Hostの巻 - ねこテニ
nginxでsites-availableとsites-enabledを用いたバーチャルホストの設定 - YoshinoriN's Memento
さくらのネームサーバー設定
設定などでミスって
nginx -t
したときに出たエラーを探るときにみたサイト