Apache: 进行虚拟主机的设置

如果服务器上有许多用户,通过Apache在一个公共目录中进行管理会很困难,所以需要设置适当的配置,以便为每个用户设置一个目录并进行公开。然后,创建基于用户目录的虚拟主机,使其看起来像是一个服务器上有多个服务器。

创建用户目录

修改httpd.conf配置文件:启用用户目录。

$ vi /usr/local/apache2/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目录进行读取和写入来避免对该目录中文件的意外访问。

用户目录已成功创建。

访问用户目录

在用户目录下创建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/

为每个用户设置权限和限制的方法。
(Per user, how to set permissions and restrictions)

<IfModule mod_userdir.c>
# vagrantとyasuyukiだけ許可する場合
    UserDir disabled
    UserDir enabled yasuyuki
</IfModule>
<IfModule mod_userdir.c>
# vagrantとyasuyukiだけ禁止する場合
    UserDir enabled
    UserDir disabled yasuyuki
</IfModule>

创建用户目录的设置文件(.htaccess文件)。

更改httpd.conf文件中用户个人目录的共享设置。

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

如果启用AllowOverride,服务器的负载会增加,因此如果没有特别需要或者需要性能时应避免使用。

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

创建配置文件(.htaccess文件)。

$ vi ~/public_html/.htaccess
Options Indexes

创建一个用于确认的空文件夹,并访问以下链接。如果文件列表显示出来,那么表示.htaccess的Options Indexes正在发挥作用,即成功。

$ mkdir ~/test

http://192.168.33.10/~vagrant/test/可以被重述为:192.168.33.10服务器上的vagrant用户的test文件路径。
http://example.com/~vagrant/test/可以被重述为:example.com服务器上的vagrant用户的test文件路径。

设置虚拟主机,让其看起来像多个服务器。

只需要一种选择:在虚拟环境内可能可以使用以下设置。

httpd.conf: 虚拟主机配置

NameVirtualHost:注册实际服务器IP以建立虚拟主机
虚拟主机:用于进行虚拟主机配置设置
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

访问虚拟主机

确认主机。

如果使用Vagrant,请检查hostsupdater.aliases的值。

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

访问各自的虚拟环境

http://example.com/ → 显示/usr/local/apache2/htdocs/的测试页面
http://dummy.com/ → 显示/home/vagrant/public_html的测试页面
http://dummy-dummy-dummy.com → 显示/home/vagrant/public_html的测试页面

广告
将在 10 秒后关闭
bannerAds