Apache:仮想ホストの設定をする


サーバにユーザが多数いる場合に、Apacheで一つの公開ディレクトリで管理するのは難しいので、ユーザごとのディレクトリを設定し公開できる設定をする。その後、ユーザディレクトリ単位の仮想ホストをつくり一つのサーバで複数サーバあるように見せる

# ユーザーディレクトリを作成する

##httpd.conf：ユーザーディレクトリを有効にする
```
$ vi /usr/local/apache2/conf/httpd.conf
```

```httpd.conf
<IfModule mod_userdir.c>
    #
    # UserDir is disabled by default since it can confirm the presence
    # of a username on the system (depending on home directory
    # permissions).
    #
    #UserDir disabled ←ここをコメントアウト

    #
    # To enable requests to /~user/ to serve the user's public_html
    # directory, remove the "UserDir disabled" line above, and uncomment
    # the following line instead:
    #
    UserDir public_html #←コメントアウトを外して有効にする

</IfModule>
```

##ユーザーディレクトリ(public_html)を作成する
一般ユーザーで作業する。（今回は仮想環境のため、vagrantユーザーで作業する）

####homeディレクトリにpublic_htmlディレクトリを作成する

```
$ mkdir ~/public_html
#
# mkdir /vagrant/home/public_html こちらでも可能
```

####アクセス権を設定する
```
# chmod:アクセス権を変更
# 701  :アクセス権。所有者以外は実行だけ許可。
# +x   :すべて実行を許可
# ~/public_html :先ほど作成したディレクトリ
# ~/            :homeディレクトリ
$ chmod 701 ~/public_html 
$ chmod +x  ~
```
>public_htmlの読み取り、書き込みを自分以外に対して禁止することでpublic_htmlディレクトリにあるファイルへの意図しないアクセスを避けることができる。

以上でユーザーディレクトリ作成完了。

####ユーザーディレクトリにアクセスする
ユーザーディレクトリにindex.htmlを作成する

```
$ cp /usr/local/apache2/htdocs/index.html ~/public_html/index.html
$ vi ~/public_html/index.html 
  #内容をユーザディレクトリ内のファイルだと判断できるものに修正する(This is a UserDir test.等）
```
下記のリンクをクリックして変更内容が表示されていれば成功
http://192.168.33.10/~vagrant/
http://example.com/~vagrant/

####ユーザー毎に許可や禁止をする方法
```httpd.conf
<IfModule mod_userdir.c>
# vagrantとyasuyukiだけ許可する場合
    UserDir disabled
    UserDir enabled yasuyuki
</IfModule>
```
```httpd.conf
<IfModule mod_userdir.c>
# vagrantとyasuyukiだけ禁止する場合
    UserDir enabled
    UserDir disabled yasuyuki
</IfModule>
```

#ユーザーディレクトリの設定ファイル（.htaccessファイル）を作成する

##httpd.conf:ユーザーディレクトリの公開設定を変更する

```httpd.conf
#
# Control access to UserDir directories. 
<Directory /home/*/public_html>
	# AllowOverride:ディレクトリごとの設定ファイルを許可する
	AllowOverride All
</Directory>

```
AllowOverrideを有効にすると、サーバーの負荷が増大するため、特に必要のない場合やパフォーマンスが要求される場合は使用しないようにすること

```httpd.conf
#
# AccessFileName: The name of the file to look for in each directory
# AccessFileName: ディレクトリごとの設定ファイルの名称
AccessFileName .htaccess
```

##設定ファイル（.htaccessファイル）を作成する

```
$ vi ~/public_html/.htaccess
```

```.htaccess
Options Indexes
```

確認用の空ディレクトリを作成し、下記のリンクにアクセスする。
ファイルの一覧が表示されれば、.htaccessのOptions Indexesが機能しているので成功。

```
$ mkdir ~/test
```
http://192.168.33.10/~vagrant/test/
http://example.com/~vagrant/test/

# 仮想ホストを設定して、複数サーバーのように見せる
のは下記の設定でできそうだが、仮想環境内に仮想環
##httpd.conf:仮想ホストの設定
###### NameVirtualHost:仮想ホストを構築する実際のサーバIPを登録する
###### VirtualHost:仮想ホストの設定をする
###### ServerAlias:仮想ホストに別名をつける
```
# Use name-based virtual hosting.
# 実際のサーバーIPアドレスとポートを設定。ここでは1台のみなので「*」を設定。
NameVirtualHost *:80
#実際のサーバーを改めて設定
<VirtualHost *:80>
    ServerAdmin root@localhost
    DocumentRoot /usr/local/apache2/htdocs/
    ServerName example.com
    ErrorLog logs/example.com-error_log
    CustomLog logs/example.com-access_log common
</VirtualHost>
#仮想ホストを設定
<VirtualHost *:80>
    ServerAdmin root@vagrant.com
    DocumentRoot /home/vagrant/public_html
    ServerName dummy.com
    ServerAlias dummy-dummy-dummy.com #仮想ホストに別名をつけることも可能 
    ErrorLog logs/dummy.com-error_log
    CustomLog logs/dummy.com-access_log common
</VirtualHost>
```

設定を反映させるため、apacheを再起動する

```
$ /etc/rc.d/init.d/httpd restart
```

##仮想ホストにアクセスする
###hostsの確認をする
vagrantを使用している場合は、hostsupdater.aliasesの値を確認する。

```Vagrantfile
config.hostsupdater.aliases = ["example.com", "dummy.com","dummy-dummy-dummy.com"]
```

###それぞれの仮想環境にアクセスする
http://example.com/ → /usr/local/apache2/htdocs/のTest Pageが表示される
http://dummy.com/   → /home/vagrant/public_htmlのTest Pageが表示される
http://dummy-dummy-dummy.com →/home/vagrant/public_htmlのTest Pageが表示される