解决Ubuntu14 apache2虚拟主机目录403错误代码

在Ubuntu14配置了一个apache环境但发现在目录显示时为403 Forbidden了,这种问题根据我的经验不是权限问题就是没有索引或apache中的目录配置问题,下面一起来看看。
刚刚安装上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之后可以看到,在下方有几个进行的权限控制,其中就有require all语句。
我们把web目录放到自己的目录下面,是想不需要sudo就能修改和调整网站,但是apache2不认你的目录,因为apache2为了安全起见,只允许/var/www、/usr/share下面的文件夹被访问。所以在最后一个后面再添加上一个允许的目录就可以了。例如:
代码如下

<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

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值