2014年3月2日日曜日

nginxのインストールからマルチドメインの設定まで(@CentOS)

  サイトを立ち上げる必要があったので、CentOSにnginxのインストールからマルチドメインの設定までの作業をした。今回はその時のメモ。(参考サイトはココと、ココと、ココ

■マルチドメインとは?

  マルチドメインは1つのサーバ(IPアドレス)で、複数のドメインを管理できること。
  例えば、「aaa.comとbbb.comの2つドメインでそれぞれ のサイトを立ち上げたいけど、今のところそんなにアクセス数もないのでサイト毎にサーバを用意するのはリソース(≒お金)の無駄だなー」という時に、重宝する。
  マルチドメインは、Webサーバアプリケーション(ここではnginx)のバーチャルサーバ機能(※1)を利用して行う。
  nginx は、(ブラウザからの)HTTP リクエストヘッダの “Host”情報を読み取り、どのコンテンツを返すべきかを判定する(参考→nginx公式解説ページ)(※2)。

■作業環境

今回の作業環境は以下のとおり。
  • サーバ: さくらインターネットのVPS
  • OS: CentOS 6
  • ドメイン:さくらインターネットであらかじめ2つのドメインを取得し、それぞれのドメインで上記VPSのIPアドレスへ紐づけの設定が完了している。

■手順1(nginxのインストールまで)

▼CentOSに、nginx用のyumリポジトリを登録するRPMをインストール

  nginx公式ページで、CentOS 6 用のRPMのURLを調べて、以下のコマンドを実行する。
# rpm -ivh http://nginx.org/packages/centos/6/noarch/RPMS/nginx-release-centos-6-0.el6.ngx.noarch.rpm
 (ここで、http://~.noarch.rpmは、上記の公式ページで調べたRPMファイルのURL)

上記を実行したら、「/etc/yum.repos.d/nginx.repo」というファイルが作成されているはずなので、確認。

▼yumでnginxをインストールし、動作確認

  nginxをyumでインストールする。
# yum install nginx

  インストール後、nginxを起動。
# /etc/init.d/nginx start

  ブラウザからサーバのURL(※3)にアクセスしてみて、nginxのwelcomeページが表示されればOK。


■手順2(nginxのバーチャルサーバ機能の設定完了まで)

▼設定ファイルを置くためのディレクトリを作成

  以下のコマンドを実行。
# mkdir /etc/nginx/sites-available
# mkdir /etc/nginx/sites-enable

  これから、運用する個々のドメイン用の設定ファイルを「sites-available」以下において、その設定ファイルを参照するシンボリックリンクを「sites-enable」以下に配置し、nginx自体はそのシンボリックリンクを参照するようにしていく(※4)。

▼個々のドメイン用の設定ファイルを作成&配置

sites-availableディレクトリ以下に、それぞれのバーチャルホスト用の設定ファイルを作成する。ファイル名は「aaa.com」のようにドメイン名と同一にしたほうが運用しやすい。
作成内容は下記の参照のこと。
例えば「vi /etc/nginx/sites-available/aaa.com」 コマンドで以下の編集をする。
# For aaa.com
server {
    listen 80;
    server_name aaa.com www.aaa.com;   #ドメイン名の指定。サブドメインも指定可。

    access_log  /var/log/nginx/access.aaa.com.log; #アクセスログの保存先もドメイン毎に。

    location / {  #コンテンツの置き場所も、ドメイン別に分けておく。
        root   /usr/share/nginx/html/aaa.com;
        index  index.html;
    }
}

上記と同じものをバーチャルサーバをつくる分だけ作り配置する。(たとえばbbb.com用など)

  次に、ここで作った設定ファイルをsite-enableディレクトリ側から参照するシンボリックリンクをはる。
# ln -s /etc/nginx/sites-available/aaa.com /etc/nginx/sites-enable/
# ln -s /etc/nginx/sites-available/bbb.com /etc/nginx/sites-enable/

▼nginxが上記で作成した設定ファイルを参照するように設定。

  viで「/etc/nginx/nginx.conf」に、
include /etc/nginx/sites-enable/*;
   
の行を加える。(他のinclude節の直後に配置しとけばよい)

▼それぞれのドメイン用コンテンツを作成。

「site-available」以下に配置したドメイン毎の設定ファイル内でlocationのrootとして設定したディレクトリを作成。
# mkdir /usr/share/nginx/html/aaa.com
# mkdir /usr/share/nginx/html/bbb.com   

作成後、それぞれのディレクトリ配下に、適当な「index.html」を作成し配置しておく。(あとで接続試験をするため)

▼設定の確認→nginx再起動→接続試験

設定に不備がないかをテストツールでテストする。問題がなければ「test is successful」のような表示がされる。
# /etc/init.d/nginx configtest   

設定に問題がなければ、nginxを再起動。
# /etc/init.d/nginx restart   

再起動後、それぞれのドメイン(今回はaaa.com、bbb.com)にブラウザからアクセスし、それぞれ意図通りのコンテンツが表示されれればOK。


以上。
意外に簡単だったので、よかった。(ここに書いているようにデフォルトバーチャルホストを設定したほうが良いかもだけど、それは今後の課題ということで。)

  • (※1)  apacheでも同じ機能があり、「バーチャルホスト機能」と呼んでる。
  • (※2)  ちなみに、仕組み上HTTPリクエストヘッダに"Host"情報を入れないブラウザでアクセスされた場合には、上手く動かない。ただそのようなブラウザはよっぽど古いブラウザだけで、現在はほとんど、Host情報を入れるようになっている。
  • (※3)  ドメイン名がまだない場合は、例えばhttp://xxx.xxx.xxx.xxxなど。ここでxxx.xxx.xxx.xxxはサーバのIPアドレス。
  • (※4)  なぜシンボリックリンクで参照させるかというと、サイトを一時的に停止したい場合、sites-enable以下のシンボリックリンクを消すだけでOKになるという運用上のメリットがあるから。

0 件のコメント:

コメントを投稿