柴ブログ

プログラミング奮闘記

NginxでVirtualHost

はじめに

フィヨルドブートキャンプのプラクティスでタイトルの通り実践したのでその時の復習をかねてまとめておきます。

やりたいこと

NginxのVirtualHost機能を使って複数のドメインのwebページを表示させたい。

実行環境

手順

お名前.comとさくらVPSの設定

まず取得したドメインと、サーバーのアドレスを紐付ける必要がある。

今回登録したのは、sample.comwww.sample.comtest.sample.comの3つ。 登録後、反映されるまで時間がかかるので注意。

ドメインIPアドレスが紐付いたかは以下のコマンドで確認出来る。

$ nslookup sample.com

Nginxの設定

ドメインごとにディレクトリを作成し、そのディレクトリにコンテンツを配置することでドメインごとに別々のコンテンツを表示させることが出来る。

$ sudo mkdir -p /srv/sample.com/{public,private,log,backup} 
  • 表示させたいコンテンツを置く。今回はHTMLで簡単なページを作成。
$ sudo vim /srv/sample.com/public/index.html
  • VirtualHost設定ファイルの作成。
$ sudo vim /etc/nginx/sites-available/sample.com
  • 更にetc/nginx/sites-enabled/に設定ファイルのシンボリックリンクを作ることで、設定ファイルを変更するだけでそれがリンクの方にも反映され、サイトを無効化するときはリンクを消すだけでよくなる(設定ファイルは残る)。
$ sudo ln -s /etc/nginx/sites-enabled/sample.com
  • 設定ファイル/etc/nginx/sites-available/sample.comを開き設定する。www.sample.comsample.comは同じコンテンツを表示させたいので以下のように書いた。
server {
    listen 80;
    server_name www.sample.com;
    access_log /srv/sample.com/log/access.log;
    error_log /srv/sample.com/log/error.log;
    location / {
        root /srv/sample.com/public/;
        index index.html index.php;
    }   
}
server {
    listen 80;
    server_name sample.com;
    access_log /srv/sample.com/log/access.log;
    error_log /srv/sample.com/log/error.log;
    location / {
        root /srv/sample.com/public/;
        index index.html index.php;
    }
}

locationに参照するコンテンツを置いたパスを記載している。

同様にしてtest.sample.com用にディレクトリ作成と設定ファイルを作成する。表示させたいコンテンツは別のものを置いた。

  • 設定ファイルのチェックは以下のコマンドを実行。構文エラーなどがあれば教えてくれる。
$ sudo nginx -t
  • Nginxを再起動する。
$ sudo /etc/init.d/nginx stop 
$ sudo /etc/init.d/nginx start 

これでsample.com(www.sample.com)とtest.sample.comにアクセスして自分で置いたコンテンツが表示されていればOK

参考