乌徒帮技术范技术中心Linux › Ubuntu14 apache2 虚拟主机 用户目录403

Ubuntu14 apache2 虚拟主机 用户目录403

分类:Linux 标签:,,

刚刚安装上apache作为本地测试环境,ubuntu上apache和centos上不同,服务进程不是httpd,而是apache2,配置方法也不一样。

Apache2的配置简介

在我的服务器上,apache的配置文件在/etc/httpd目录下面httpd.conf,虚拟主机的配置文件conf.d/vhost.conf。而Apache2的配置目录则是/etc/apache2,其下的apache2.conf是总配置文件,引用了mods-available、mods-enabled、sites-available、sites-enabled这几个目录下的.load和.conf文件。它的逻辑更加简单,即apache2.conf作为总配置文件,把一些基础的配置放在这里,mods-available、sites-available里面则放可用的模块和网站配置。“可用”不是说“已启用”,如果要启用这些“可用”的模块或配置,需要在对应的enabled目录下放一个软连接。下面举一个例子:

$ sudo vi /etc/apache2/sites-available/www.test.com.conf

这样就创建了这个conf文件,但是它不会马上用于配置中,即使你restart一下服务,也不会让它生效。要生效,必须先“启用”它,并且reload服务。

$ sudo ln -s /etc/apache2/sites-available/www.test.com.conf /etc/apache2/sites-enabled/www.test.com.conf

然后再来执行reload:

$ sudo service apache2 reload

才能更新配置,让配置生效。不过apache2提供了一个操作,不需要我们自己使用ln -s命令来实现软链接。这个命令如下:

$ sudo a2ensite /etc/apache2/sites-available/www.test.com.conf

a2ensite相当于apache2 enable site的缩写,意思是说“启用网站”,实际上是把sites-available目录下的对应的conf文件做一个软链接到sites-enabled目录下。使用这句命令后再reload一下服务,就可以启用这个网站了。同样的道理,使用a2dissite(apache2 disable site)命令就可以停用这个网站。

配置虚拟主机

这个和一般的虚拟主机配置没有特别大的区别,不过apache2中多了一条Require all granted/denied官方更新说明,下面会讲到。

上面我们已经vi了一个www.test.com.conf,我们现在干脆就用它做讲解。写入下面的内容:

<VirtualHost *:80>
        ServerName www.test.com
        ServerAdmin webmaster@test.com
        DocumentRoot /var/www/html/www.test.com
        <Directory /var/www/html/www.test.com>
            Options FollowSymLinks
            AllowOverride None
            Order deny,allow
            Deny from all
        </Directory>
        ErrorLog ${APACHE_LOG_DIR}/demo_error.log
        CustomLog ${APACHE_LOG_DIR}/demo_access.log combined
</VirtualHost>

从总体结构上跟其他的虚拟主机配置差不多,但是这总配置没有我们下面要提到的Require all。Apache2中增加了这一个语句,用来替换Deny from all, Allow from all。可以用下面的来实现:

<VirtualHost *:80>
        ServerName www.test.com
        ServerAdmin webmaster@test.com
        DocumentRoot /var/www/html/www.test.com
        <Directory /var/www/html/www.test.com>
            Options FollowSymLinks
            AllowOverride None
            Require all granted           # granted表示可以访问,denied表示不可以访问
        </Directory>
        ErrorLog ${APACHE_LOG_DIR}/demo_error.log
        CustomLog ${APACHE_LOG_DIR}/demo_access.log combined
</VirtualHost>

但是实际上这个不是关键,只是一点小变化而已,原来的配置其实是可以继续用的。有人说使用这种方法能够解决下面的问题,但是实际上是不行的,逻辑都不对。

在用户目录创建网站时出现403 Forbidden

403 forbidden的原因基本上就是权限问题了。有人说使用上面的Require all granted就可以解除了,但事实是不行的。问题跟它也有点关系,但不在于虚拟主机,而在于apache2.conf文件。vi apache.conf之后可以看到,在下方有几个<Directory></Directory>进行的权限控制,其中就有require all语句。

我们把web目录放到自己的目录下面,是想不需要sudo就能修改和调整网站,但是apache2不认你的目录,因为apache2为了安全起见,只允许/var/www、/usr/share下面的文件夹被访问。所以在最后一个</Directory>后面再添加上一个允许的目录就可以了。例如:

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

这样之后,再sudo service apache2 reload,就可以访问这个目录了。当然,还有一种可能,就是apache的用户组www-data没有权限访问你的目录(权限控制的比较紧的情况下),你还要考虑chmod你的目录权限:

$ chmod 711 /home/user
$ chmod 755 /home/user/websites

让目录具有可读可执行的权限。这样之后应该就可以访问你的网站了。

填写个人信息,赶快回复吧!