NginxでVirtualHost
はじめに
フィヨルドブートキャンプのプラクティスでタイトルの通り実践したのでその時の復習をかねてまとめておきます。
やりたいこと
NginxのVirtualHost機能を使って複数のドメインのwebページを表示させたい。
実行環境
手順
お名前.comとさくらVPSの設定
まず取得したドメインと、サーバーのアドレスを紐付ける必要がある。
- お名前.com側の設定...DNS関連機能の設定:DNSレコード設定や お名前.comで取得したドメインをサクラVPSに設定するを参考にさくらVPSのIPアドレスと取得したドメインを紐付ける。
- さくらVPS側の設定...ネームサーバ利用申請を参考に取得したドメインを登録。
今回登録したのは、sample.com
、www.sample.com
、test.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.com
とsample.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