2014年7月9日水曜日

【Apache】 ローカル環境で仮想ホストを作成する。

PHPファイルを作成しローカル環境で実行する場合
Apacheをインストールしたフォルダ配下のhtdocsフォルダにファイルを作成し、http://localhost/XXXX.phpとブラウザで確認します。

例えば「%APACHE_HOME%\htdocs\test.php」というPHPファイルは「http://localhost/test.php」でブラウザで確認します。

複数のWebサイトを管理する場合、htdocsフォルダ配下にサイトごとにフォルダを作成すればよいのかと思ったのですが
これだとルートディレクトリは「%APACHE_HOME%\htdocs」なので外部ファイルを読み込む際のパスなど、なにかと問題が発生します。

例えば「website_a」と「website_b」という二つのサイトがあり、それぞれに「test.php」がある場合
以下のようなPHPファイルは
「%APACHE_HOME%\htdocs\website_a\test.php」
「%APACHE_HOME%\htdocs\website_b\test.php」
ブラウザでは以下のように確認することになります。
「http://localhost/website_a/test.php」
「http://localhost/website_b/test.php」

外部ファイルを絶対パスなどで読み込む際にwebsite_aもwebsite_bもルートディレクトリが「%APACHE_HOME%\htdocs」になるので
「website_a」配下のファイルにアクセスするのに困ってしまいます。

「website_a」のルートディレクトリは「%APACHE_HOME%\htdocs\website_a」
「website_b」のルートディレクトリは「%APACHE_HOME%\htdocs\website_b」
と設定したいと思います。

Apacheにバーチャルホスト(仮想ホスト)を設定する

仮想ホストとは、Webブラウザーで指定されるURLとサーバー上の実際のフォルダとを結びつける役割をします。
つまり好きな場所に配置したフォルダ内のファイルを、こんなURLでアクセスするからちゃんと表示してねと設定してあげるんですね。

今回は「D:\website_a」フォルダを作成し、「http://local.website_a」でアクセスできるように設定してみます。

%APACHE_HOME%\conf\httpd.confの編集


1.アクセス権限の変更
以下のような記載箇所を検索し
赤字の「Deny from all」を「Allow from all」に変更します。
<Directory />
    Options FollowSymLinks
    AllowOverride None
    Order deny,allow
    Deny from all
</Directory>
これですべてのフォルダに対してアクセス権限を与えることができます。
もし個別のフォルダに対してアクセス権限を与えるのであれば、以下のようにパスを指定します。
<Directory "D:\website_a"/>
    Options FollowSymLinks
    AllowOverride None
    Order deny,allow
    Allow from all
</Directory>

2.仮想ホストの設定ファイルを読み込めるようにする
以下のような記載箇所を検索し
赤字の「#」を削除します。
# Virtual hosts
#Include conf/extra/httpd-vhosts.conf
これで仮想ホストの設定ファイル「conf/extra/httpd-vhosts.conf」を読み込むようになります。

%APACHE_HOME%\conf\extra\httpd-vhosts.confの編集


コメントは省いて、以下のような記載があると思います。
NameVirtualHost *:80

<VirtualHost *:80>
    ServerAdmin webmaster@dummy-host.localhost
    DocumentRoot "C:/Program Files2/Apache2.2/docs/dummy-host.localhost"
    ServerName dummy-host.localhost
    ServerAlias www.dummy-host.localhost
    ErrorLog "logs/dummy-host.localhost-error.log"
    CustomLog "logs/dummy-host.localhost-access.log" common
</VirtualHost>

<VirtualHost *:80>
    ServerAdmin webmaster@dummy-host2.localhost
    DocumentRoot "C:/Program Files2/Apache2.2/docs/dummy-host2.localhost"
    ServerName dummy-host2.localhost
    ErrorLog "logs/dummy-host2.localhost-error.log"
    CustomLog "logs/dummy-host2.localhost-access.log" common
</VirtualHost>
以下のように変更します。
NameVirtualHost *:80

#=======================
#localhost
#=======================
<VirtualHost *:80>
    ServerName localhost
    DocumentRoot "C:/Program Files/Apache2.2/htdocs"
    ErrorLog "logs/localhost-error.log"
    CustomLog "logs/localhost-access.log" common
</VirtualHost>

#=======================
#website_a
#=======================
<VirtualHost *:80>
    ServerAdmin webmaster@dumy.co.jp
    DocumentRoot "D:/website_a"
    ServerName local.website_a
    ErrorLog "logs/local.website_a-error.log"
    CustomLog "logs/local.website_a-access.log" common
</VirtualHost>
ServerAdmin・・・管理者のメールアドレス
DocumentRoot・・・サイトのファイルのあるフォルダ
ServerName・・・サイトにアクセスするための名前
ErrorLog・・・エラーログ
CustomLog・・・アクセスログ common・・・httpd.confファイル内で定義されているcommonフォーマットを利用する

一つ目の仮想ホストの設定は
今まで通り「%APACHE_HOME%\htdocs」フォルダ配下のファイルを「http://loalhost」でアクセスできるようにするためのものです。
二つ目の仮想ホストの設定は
「D:/website_a」フォルダ配下のファイルを「http://local.website_a」でアクセスできるようにするためのものです。

設定を有効にするためにApacheを再起動します。

C:\WINDOWS\system32\drivers\etc\hostsの編集


ServerNameで設定した名前「local.website_a」とIPアドレスを紐付するために、hostsファイルを編集します。
hostsファイルはwindows7の場合「C:\WINDOWS\system32\drivers\etc」にあります。
「127.0.0.1 localhost」の次行に「127.0.0.1 local.website_a」を追記します。
127.0.0.1 localhost
127.0.0.1 local.website_a
「127.0.0.1」はローカル・ループバック・アドレスと呼ばれ、自分自身を指す特別なIPアドレスです。
ホスト名「localhost」や「local.website_a」でアクセスされたとき、自分自身にアクセスするように設定しています。
設定を有効にするためにブラウザを一度閉じて開き直します。


以上で設定は終了です。
「D:\website_a」にhtmlファイルを配置し、「http://local.website_a/XXX.html」にアクセスして表示されるか確認してください。

0 件のコメント: