一回折れた人

日々の出来事をつらつらと

vagrant、apacheでNameVirtualHost

自分用メモです。(いらない部分あると思うので、良かったらご指摘ください。) NameVirtualHostについてはapacheの公式に詳しく載っています。 1つのIPに対して複数のドメインname.test」「name.test2」で接続出来るようにします。

環境

・OS:windows10(ホスト) ・Vagrant 1.8.4 ・virtualbox 5.0.10 ・centOS6(ゲスト)

Vagrant側の準備

追記:必ずコマンドプロンプトを管理者で実行からvagrantを操作して下さい。

f:id:hpptms:20170921233429p:plain

例えば「mainhpptmas.com」に接続する場合、このドメインはプライベートのvirtualboxドメインという事をwindows側に知らせる必要があります。 その際に「C:/WINDOWS/system32/drivers/etc/hosts」のhostsファイルを書き換える必要がありますが、めんどくさいですよね。 そんな訳でvagrantのpluginで解決できます。

//vagrantにpluginを追加
vagrant plugin install vagrant-hostsupdater

このプラグインはホスト側(windows)のhosts情報の書き変えを自動で行ってくれます。 仮想環境のhostsについては自分で書き換える必要があります。 ※hostsを書き換える系のプラグインは何種類かあって、ホスト、ゲスト両方書き換えに対応しているプラグインもありましたが、僕の環境だと上手く動作しなかったので、今回は「vagrant-hostsupdater」にしました。

プラグインを導入し終わったら、vagrantfileに追記します。

  # 使いたいプライベートIP
  config.vm.network "private_network", ip: "192.168.1.20"
  # 好きなホスト名を入れます。
  config.vm.hostname = "name"
  # 好きなバーチャルホスト名を入れます。
  config.hostsupdater.aliases = ["name.test", "name.test2"]

ファイルを更新したら、「vagrant up」もしくは「vagrant reload」してあげます。 何やらそれっぽいことをしてくれてますね。 ※ウイルス対策ソフトでhostsファイルへの書き込みが出来ないことがあるので、上手くいかない場合は確認してみてください。僕はaviraというウイルスソフトを使っていますが、設定しないとhostsに書き込みできませんでした。

==> default: [vagrant-hostsupdater] Checking for host entries
==> default: [vagrant-hostsupdater] Writing the following entries to (C:/WINDOWS/system32/drivers/etc/hosts)
==> default: [vagrant-hostsupdater]   192.168.1.20  name  # VAGRANT: 5105a5ec7710ba611361840c2e933ecd (default) / a99a1dee-eb05-47d5-8170-9a3fc533541b
==> default: [vagrant-hostsupdater]   192.168.1.20  name.test  # VAGRANT: 5105a5ec7710ba611361840c2e933ecd (default) / a99a1dee-eb05-47d5-8170-9a3fc533541b
==> default: [vagrant-hostsupdater]   192.168.1.20  name.test2  # VAGRANT: 5105a5ec7710ba611361840c2e933ecd (default) / a99a1dee-eb05-47d5-8170-9a3fc533541b

vagrantが起動し終わったら先にwindowsのhostsを見てみましょう上の起動ログの中にhostsのパスが書いてあります。

192.168.1.20  name  # VAGRANT: 5105a5ec7710ba611361840c2e933ecd (default) / a99a1dee-eb05-47d5-8170-9a3fc533541b
192.168.1.20  name.test  # VAGRANT: 5105a5ec7710ba611361840c2e933ecd (default) / a99a1dee-eb05-47d5-8170-9a3fc533541b
192.168.1.20  name.test2  # VAGRANT: 5105a5ec7710ba611361840c2e933ecd (default) / a99a1dee-eb05-47d5-8170-9a3fc533541b

これでホスト側(windows側)の設定は終わりです。 これでvagrantの仮想環境に入る時にTera Termなどで繋ぐ時に、上の例だと接続先を「192.168.1.20」もしくは「name」で入れるようになります。

Vagrant側のhosts

まずはyum updateしちゃいましょう。(一応) 次に仮想環境のhostsファイルを確認します。今回のプラグインだとゲスト側は書き換えてくれないので自分で書き換えていきます。 何も手を加えていない状態だと下記の様な状態だと思います。

127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6

上の状態のhostsファイルを下記の状態にします。

127.0.0.1   192.168.1.20
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6

192.168.1.20 name.test name.test2

apache(httpd)の編集

次にapachephpを入れます。

/*apache*/
yum install httpd -y //インストール
service httpd start //起動
chkconfig httpd   //常時起動

/*php*/
yum -y install php  //インストール
php -v              //ver確認

apacheを入れた時点でブラウザに今回の場合だと、「http://name」でapacheの初期画面が表示されます。 次にapacheの大元の設定ファイルを変更します。 「vi /etc/httpd/conf/httpd.conf」などで中を編集します。

#NameVirtualHost *:80
↓コメントを解くだけ
NameVirtualHost *:80

ServerName www.example.com:80
↓別ファイルに書くのでコメント化する
#ServerName www.example.com:80

//別ファイルにVirtualHostの設定ファイルを作るので、下記がコメント化されていたら解除
Include conf.d/*.conf

次にVirtualHostの接続先の情報を作ります。

//ファイルの作成と書き込み
vim /etc/httpd/conf.d/VirtualHost.conf

/*ザックリで申し訳ないですが、ファイルの中身*/
ServerName name

# 1つめのサイト
<VirtualHost *:80>
  DocumentRoot /var/www/html/1
  ServerName name.test
  <Directory "/var/www/html/1">
    Order allow,deny
    Allow from all
    Satisfy Any

    Options FollowSymLinks
    AllowOverride all
    Require all granted
  </Directory>
</VirtualHost>

# 2つ目のサイト
<VirtualHost *:80>
  DocumentRoot /var/www/html/2
  ServerName name.test2
  <Directory "/var/www/html/2">
    Order allow,deny
    Allow from all
    Satisfy Any

    Options FollowSymLinks
    AllowOverride all
    Require all granted
  </Directory>
</VirtualHost>

急にザックリになって申し訳ないですが、まだapacheファイルの設定については全然理解していないので、「VirtualHost.conf」の方のファイルの中身は大幅に減らせると思います。 確か「/comf.d/*」の設定の大元をメインの設定ファイルと一緒にするみたいなことができたと思うので、いちいち「VirtualHost.conf」の方で「<Directory >」を定義しなくても良かったハズです。 もう少し色々試しながらapacheの設定ファイルを理解していきたいです。 とりあえず全く同じ操作をして頂ければvagrandで使った仮想マシンでVirtualHostで分けた通りに動作してくれると思います。

余談

NameVirtualHostは元々凄く苦手で今回汚いなりにも動作してくれたので、ちょっと嬉しかったです。 apacheの設定ファイルに使われている設定値ってそんなに多くないと思うのですが、「httpd.conf」を開いた瞬間にコメントの多さと設定ファイルの長さ1000行くらいで最初からこれは合わないと感じましたw 後はNameVirtualHost=サブドメインだと思っているのですが何だか違うようなそうなような、この辺は全然知識が足りてません。 とりあえずは動作してくれて一安心していますが、同じことをまた出来るようにしとかないとダメですね。