Nginxインストール手順まとめ

Nginx応用編①バーチャルホストを設定する。Linuxサーバ構築手順まとめ

Posted 11月 1 2014 by tths  ,

Nginxを使ってWebサーバ構築。今回はバーチャルホストを設定します。Linuxサーバ構築手順まとめ

Nginxでバーチャルホストを設定してみます。

本連載では、Linux上で様々なサーバソフトウェアのインストール手順、操作・設定方法を解説していきます。嵌まりそうなポイントや細かい部分の説明していきます。Linuxでサーバ構築する際の参考にして下さいね。

間があいてしまいましたが、満を持しての再開です!今回からはNginx応用編です。
前回の「Nginx設定編⑤locationディレクティブを読む。Linuxサーバ構築手順まとめ」までで、server,locationなど、重要なディレクティブの内容を細かく見ていきました。今回からはそれらの設定をいじり、NginxのWebサーバとしての挙動をカスタマイズしていきます。応用編第一回は「バーチャルホストの設定」です。

バーチャルホストとは

バーチャルホストとはWebサーバの機能の一つで、単一サーバ上に複数のドキュメントルートを作成することができる機能です。これにより、下図のように、別URLでアクセスしても同一Webサーバ上にアクセスされ、且つ別領域のコンテンツを表示するといった処理が可能になります。バーチャルホストはApacheやIISでも当然のように用意されている機能で、Nginxも例外ではありません。

バーチャルホストイメージ

バーチャルホストイメージ

※これには、「このURLにアクセスしたときにこのホストを参照する」というDNS、ドメインの設定が必要になりますが、今回は割愛します。

Nginxでバーチャルホストの設定をしてみよう。

それでは実際にNginxでバーチャルホストを設定していきましょう。
まず、設定ファイルのserverディレクティブを複製します。

# vi /etc/nginx/conf.d/default.conf

serverディレクティブはコメントアウトも含め、結構量が多いので、必要最低限の内容で複製します。

server {
    listen       80;
    server_name  localhost;
~省略~
}
server {
    listen       80;
    server_name  server1.com;
    location / {
        root   /usr/share/nginx/html/server1;
    }
}
server {
    listen       80;
    server_name  server2.com;
    location / {
        root   /usr/share/nginx/html/server2;
    }
}
server {
    listen       80;
    server_name  server3.com;
    location / {
        root   /usr/share/nginx/html/server3;
    }
}

既存のserverディレクティブは長いので省略しました。6行目以降が追加した内容です。
3つのバーチャルホスト用のserverディレクティブを追加しています。
注目したいのは「server_name」ディレクティブと「location」ディレクティブ内の「root」で、各serverディレクティブで別の名称、パスを設定しています。ここを同じにしてはいけません。
ちなみにserver_nameで指定している「server1.com」というドメイン名は仮でつけているだけで、これをブラウザに打ち込んだからといって、どこからでもこのNginxサーバにアクセスできるわけではありません。

バーチャルホストの設定を確認・反映しよう。

さて、それではこの編集ファイルを保存し閉じたら、設定が正常にできたかを確認しましょう。
設定のテストを行う際には、nginxコマンドに次のようにconfigtestを引数として渡します。

# /etc/init.d/nginx configtest

正常にテストが実行されれば、こんな風に結果が返ってくるはずです↓

# /etc/init.d/nginx configtest
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

もしエラーがあると、こんな風にエラーが返ってきます↓

# /etc/init.d/nginx configtest
nginx: [emerg] unexpected end of file, expecting "}" in /etc/nginx/conf.d/ORG_default.conf:58
nginx: configuration file /etc/nginx/nginx.conf test failed

このエラーは、最後の「}」を付け忘れてしまった場合のエラーです。
エラー内容を読んで、設定ファイルでおかしなところを修正してから再度configtestを実行、を繰り返し、
successfulが返ってくるようにしましょう。

設定がOKになっても、その変更内容はまだ反映されていない状態です。
そこで、変更内容を反映します。その際には次のコマンドを実行します。

# /etc/init.d/nginx reload

下記のように結果が返ってくれば再読み込み成功です。

# /etc/init.d/nginx reload
nginx を再読み込み中:                                      [  OK  ]

設定反映ができたら、次に各rootディレクティブで指定したパスにindex.htmlを作成しておきましょう。

# mkdir /usr/share/nginx/html/server1
# vi /usr/share/nginx/html/server1/index.html

index.htmlの内容はこんな感じ。

<html>
<head><meta charset="utf-8"></head>
<body>
バーチャルホスト「server1」のindexページです。
</body>
</html>

もちろんこの通りでなくても構いません。
同様にserver2,3のディレクトリとindex.htmlも作成しておきます。

最後に今作成したバーチャルホストのドメインでアクセスできるようにローカルPCのhostsファイルを書き換えましょう。
本来、ドメイン名をDNSサーバに問い合わせ、取得できたIPアドレスにアクセスする、という仕組みでインターネット上のサーバへのアクセスというのは行われますが、今回はDNSサーバを使用せずに仮で名づけたserver1~3.comというサーバへアクセスしますので、ドメイン名とIPアドレスの対応をローカルPCに指定しておいてやらねばなりません。
その設定を行うのがhostsファイルです。

hostsファイルの末尾に以下の3行を追加しましょう。

192.168.100.XXX		server1.com
192.168.100.XXX		server2.com
192.168.100.XXX		server3.com

最初のIPアドレスはNginxをインストールしているサーバのIPアドレスを指定してあげてください。
hostsファイルはそのPCの管理者権限でないと書き換えられませんので注意しましょう。

ここまでできたら、実際にWebブラウザでアクセスして表示を確認してみましょう。

http://server1.comにアクセス

Nginxへserver1.com指定でアクセス

Nginxへserver1.com指定でアクセス

http://server2.comにアクセス

Nginxへserver2.com指定でアクセス

Nginxへserver2.com指定でアクセス

http://server3.comにアクセス

Nginxへserver3.com指定でアクセス

Nginxへserver3.com指定でアクセス

いかがでしょうか。先ほど作成したHTMLファイルが表示されたと思います。

デフォルトのバーチャルホストの設定をしてみよう。

さて、ここで今までと同じようにIPアドレスでアクセスしてみるとどうなるでしょうか。

http://[IPアドレス]

でアクセスしてみます。

NginxへIPアドレス指定でアクセス

NginxへIPアドレス指定でアクセス

上図のように、Nginxデフォルトのindex.htmlが表示されるかと思います。
つまり、IPアドレスを指定した際に読み込まれるserverディレクティブは、一番最初に記述されているserverディレクティブになります。一番最初に記述されているものではないserverディレクティブをデフォルトで読み込まれるように指定したい場合は、次のように記述します。

server {
    listen       80 default_server;
    server_name  server3.com;
    location / {
        root   /usr/share/nginx/html/server3;
    }
}

「default_server」をlistenディレクティブで指定しています。

今回のまとめ

今回はNginxにおけるバーチャルホストの設定を行いました。バーチャルホストは1台のWebサーバで複数のサイトを管理できるため非常に便利な機能です。serverディレクティブ内には、今までやってきたようなaccess_logやerror_logなどの設定もできるので、サイトごとにログ出力先を変えるといった設定も可能です。ぜひ活用してみてください。
次回はリバースプロキシの設定を行っていきます。


Apache Nginx サーバーの設計・構築



  未経験OKの仕事 |  上場企業の仕事 |  高待遇の仕事 |  外資系の仕事 |  社内SEで検索 |  自社サービスで検索





メールアドレス
ご質問・問い合わせ等、ご自由にお書きください。