旷世的忧伤

Huoty's Blog

Ubuntu下简单配置Apache虚拟主机的方法

在Linux下开发Web程序,例如编写html、php等程序时,默认要到/var/www目录下才能工作,而 /var/www 目录必须要有超级用户权限才能访问,还得改这个目录的权限。有的人可能会想到把项目工程目录放到主目录下,然后在 /var/www 目录下做一个软链接。这也不失为一个方法,起码可以在属于当前用户自己的目录下工作。但是,我们在浏览器中对网站进行访问调试的时候需要输入工程目录名。例如:http://localhost/mysite/,这样才能访问,如何项目工程名很长很难记的话,是不是感觉很麻烦呢。

其实我们还有一种方法将站点配置到属于自己的工作目录中,那就是配置虚拟主机。通过配置不同的端口号来访问不同的站点目录。例如将一个端口号为 8888 的虚拟主机的根目录配置为自己的工程开发目录 /home/huoty/mysite,那么就可以通过端口号直接访问正在开发的目录。

我的apache版本为:Server version: Apache/2.4.7 (Ubuntu)。

【 1 】 打开/etc/apache2/ports.conf文件添加一个端口,例如添加 8888 端口,则在该文件中添加 Listen 8080

$ sudo vi /etc/apache2/ports.conf

如下所示:

# If you just change the port or add more ports here, you will likely also
# have to change the VirtualHost statement in
# /etc/apache2/sites-enabled/000-default.conf

Listen 80
Listen 8888

<IfModule ssl_module>
    Listen 443
</IfModule>

<IfModule mod_gnutls.c>
    Listen 443
</IfModule>

# vim: syntax=apache ts=4 sw=4 sts=4 sr noet

【 2 】 复制/etc/apache2/sites-available目录下的000-default.conf文件:

$ sudo cp /etc/apache2/sites-available/000-default.conf /etc/apache2/sites-available/mysite.conf

然后将VirtualHost *:80改为VirtualHost *:8080 将DocumentRoot /var/www/html 改为自己的目录,例如:DocumentRoot /home/huoty/mysite

【 3 】 将mysite.conf 软链到sites-enabled:

$ sudo ln -s /etc/apache2/sites-available/mysite.conf /etc/apache2/sites-enabled/mysite.conf

放在 sites-enabled 目录下的配置文件才是真正有效的配置文件,通常情况下我们会在 sites-available 目录下存放配置好的配置文件,然后将需要启动的站点的配置文件软链接到 sites-enabled 目录下。这样方便我们取消和重设站点。

【 4 】 重启apache服务

$ sudo service apache2 restart

【 5 】 在 /home/huoty/mysite/ 目录下建立一个测试页面index.html,在浏览器中打开:http://localhost:8080/ 如果显示正常,则配置结束。

【 6 】 如果页面无法正常显示,并提示 403 Forbidden 错误:You don’t have permission to access / on this server. 解决办法: 打开/etc/apache2/apache2.conf文件,添加一下内容:

<Directory /home/konghy>
    Options Indexes FollowSymLinks
    AllowOverride None
    Require all granted
</Directory>

【 7 】 为了保证 apache 由权限访问你所配置的目录,可以将 apache 用户添加到自己的用户组中,apache 的默认用户名为 www-data,修改方法为:

$ sudo usermod -a -G huoty www-data

huoty为当前用户的用户组。

【 最后 】对第 6 步的配置做一下说明。在apache中,对目录的访问是由两方面来结合起来共同控制的,一方面是apache本身,另一方面是Linux系统本身。如下图所示:

apache

也就是说即使指定用户对系统中的文件有访问权限,而 apache 本身对齐没有访问权限,用户也无法正常访问文件。Apache 使用<Directory>… </Directory>来设置指定目录的访问权限,该设置对子目录同样有效,其中可包含五个属性:

Options
AllowOverride
Order
Allow
Deny

Options可以组合设置下列选项:

All:用户可以在此目录中作任何事情。
ExecCGI:允许在此目录中执行CGI程序。
FollowSymLinks:服务器可使用符号链接指向的文件或目录。
Indexes:服务器可生成此目录的文件列表。
None:不允许访问此目录。

AllowOverride 会根据设定的值决定是否读取目录中的.htaccess文件,来改变原来所设置的权限:

All:读取.htaccess文件的内容,修改原来的访问权限。
None:不读取.htaccess文件

为避免用户自行建立.htaccess文件修改访问权限,apache2.conf文件中默认设置每个目录为: AllowOverride None。

Allow 用于设定允许访问Apache服务器的主机,例如:

Allow from all  # 允许所有主机的访问
Allow from 202.96.0.97 202.96.0.98  # 允许来自指定IP地址主机的访问

Deny 用于设定拒绝访问Apache服务器的主机,例如:

Deny from all  # 拒绝来自所有主机的访问
Deny from 202.96.0.99 202.96.0.88 # 拒绝指定IP地址主机的访问

Order 用于指定allow和deny的先后次序:Order allow,deny

Top