debian配置apache2.4配置虚拟主机遇到的问题

0x01 Ubuntu配置apache2的前置知识

使用apt-get安装的apache2与直接编译安装版本略有不同,其配置文件不在是httpd.conf,而是/etc/apache2/apache2.conf。

而其虚拟主机的位置的配置文件也不在是vhost之类的,而是sites-avilable/xxx.conf。默认的localhost为000-default.conf,按照这个配置文件,配置一份demo.conf,就完成了虚拟主机的配置工作。

配置参考http://wiki.ubuntu.org.cn/Apache虚拟主机指南,这是Ubuntu的中文维基百科。推荐配置如下:

<VirtualHost *:80>
ServerName edunuke.example.com
ServerAdmin [email protected]
DocumentRoot "/var/www/edunuke/"
ErrorLog "/var/log/apache2/edunuke_errors.log"
CustomLog "/var/log/apache2/edunuke_accesses.log" common
</VirtualHost>

可以看到推荐的配置是/var/www/的子目录。

按照000-default.conf的配置,填写完整的配置如下:

<VirtualHost *:80>
        ServerName demo

        ServerAdmin [email protected]163.com
        DocumentRoot /home/user/webroot
        <Directory /home/user/webroot>
                Options Indexes FollowSymLinks MultiViews
                AllowOverride All
                Order allow,deny
                Allow from all
        </Directory>

        ErrorLog ${APACHE_LOG_DIR}/demo_error.log
        CustomLog ${APACHE_LOG_DIR}/demo_access.log combined
</VirtualHost>

很多时候的403错误都是<Directory>标签没有配置Allow from all,因为默认是Deny from all。

(注意,这里的Allow from all的配置项目属于2.2.x及以下版本才有,2.4.x已经不需要这个配置了)

然后使用命令a2ensite demo来使demo启用,再使用service apache2 reload来使配置生效。

别忘了修改/etc/hosts文件,使demo指向127.0.0.1。

原理上说到这里已经配置完毕,应该可以直接访问了,但是,一大波403正在靠近。。。。。

0x02问题来了

如果按照维基百科的配置,将目录选择在/var/www/目录或者子目录的话,完全无压力可以跑。但是换到/home/user/webroot之类的地方就出现403错误。

看错误日志,具体信息为:

AH00035: access to / denied (filesystem path ‘/home/user/webroot‘) because search permissions are missing on a component of the path

这说明在/home/user/webroot的路径上,存在一个目录权限设置有问题,导致拒绝访问。

1、修改/home/user/权限。

因为默认情况下该目录是700,apache2是无法访问的。

修改为711即可。

2、修改/home/user/webroot权限。

chmod 755 -R /home/user/webroot/

让webroot及其子目录拥有755权限,将一些特殊目录设置777,如assets目录,runtime目录等,这个根据程序修改。

权限修改完毕,请求依然是403。

H01630: client denied by server configuration: /home/user/webroot/

看来是服务器配置问题啊。可是在网上搜了不少文章,都没有提到这个事情。

悲剧折腾了两天,重装,换目录也不行,哪怕换到/var/webroot/也还是不行,一一对比了/var/www和/home/user/webroot的权限设定,也没有问题啊,很纠结。

这时候叫来了Scrat同学,经过一阵瞎折腾,在修改了/etc/apache2/apache2.conf文件后的一个配置后居然可以了

<Directory />
        #Options FollowSymLinks
        #AllowOverride None
        #Require all denied
        #我也忘记当时他改了什么,大概是把demo.conf中的<Directory>复制过来了
</Directory>

(PS这不是正确的方法,正确的方法见后续)

注释掉了这里的东西,写入了不知道从哪里找来的几行配置,居然访问通过了。

说实话,我觉得apache通过a2ensite/a2dissite这类命令来控制虚拟主机,是架构上先进的体现,没想到配置虚拟主机还得修改apache2文件。。。。郁闷。。

晚上回去我又仔细看了看这个配置文件,发现是自己傻逼了。

# Sets the default security model of the Apache2 HTTPD server. It does
# not allow access to the root filesystem outside of /usr/share and /var/www.
# The former is used by web applications packaged in Debian,
# the latter may be used for local directories served by the web server. If
# your system is serving content from a sub-directory in /srv you must allow
# access here, or in any related virtual host.
<Directory />
        Options FollowSymLinks
        AllowOverride None
        Require all denied
</Directory>

<Directory /usr/share>
        AllowOverride None
        Require all granted
</Directory>

注释已经说了,这是防止访问根目录以外的目录做的特殊安全设定,默认情况下除了/usr/share和/var/www外,其他目录都apache服务器都不能访问。要使/home/user/webroot可以访问,就要增加一个类似的访问请求项目:

<Directory /home/user/webroot>
        AllowOverride None
        Require all granted
</Directory>

OK,这下达到原先的目标了。

但是这还没完,难道增加一个虚拟主机就得修改一次apache2.conf文件?真不能通过a2enssite无缝增加一个虚拟主机?

答案是肯定的,其实还是demo.conf配置问题,需要增加一个配置项目:Require all granted。

完整的配置如下:

<VirtualHost *:80>
        ServerName demo

        ServerAdmin xbzbing#163.com
        DocumentRoot /home/user/webroot
        <Directory /home/user/webroot>
                Options Indexes FollowSymLinks MultiViews
                AllowOverride All
                Require all granted
        </Directory>

        ErrorLog ${APACHE_LOG_DIR}/demo_error.log
        CustomLog ${APACHE_LOG_DIR}/demo_access.log combined
</VirtualHost>
时间: 2024-10-01 21:44:46

debian配置apache2.4配置虚拟主机遇到的问题的相关文章

ubuntu下安装配置apache2(含虚拟主机配置)2

Apache配置文件httpd.conf说明 DocumentRoot "/var/www/html" ---Apache默认服务器主目录路径 DirectoryIndex index.html index.htm index.php index.html.var ---默认文档,多个文件之间用空格分开 Listen 192.168.1.1:80       设置监听ip是192.168.1.1的地址和端口为80 Listen 192.168.1.2:8080     设置监听ip是1

Ngingx常用配置(二)虚拟主机,访问控制,认证和状态信息

环境概况: IP地址 服务器状态 简述 192.168.180.4 Nginx服务器 192.168.180.23 client 192.168.171.231 client 具体测试步骤如下: (一)基于虚拟主机的配置.是通过不同的域名来区分提供的web服务器的主机,server_name指令主要用于配置基于域名的虚拟主机 1,首先在192.168.180.23修改/etc/hosts文件 [[email protected] haproxy]# vim /etc/hosts 192.168.

Nginx(6)-配置基于域名的虚拟主机

配置基于域名解析的虚拟主机 1.准备站点 我们站点统一放到/www/vhosts/下,每个站点根目录名称都和域名相同,具体如下. 新建www.stu31.com的站点根目录 [[email protected] extra]# mkdir /www/vhosts/www.stu31.com 新建www网站的首页index.html [[email protected] extra]# echo "Welconf to www.stu31.com" > /www/vhosts/ww

Apache配置基于IP的虚拟主机 Apache virtual host configuration is based on the IP

Step 1: 检查是否开启 httpd-vhosts.conf apache/conf/httpd.conf文件 # Virtual hosts Include conf/extra/httpd-vhosts.conf 如果没有开启,必须在httpd.conf文件中设置:如果开启,则可以在apache/conf/extra/httpd-vhosts.conf文件中设置,当然也还是可以再httpd.conf文件中进行设置,同样有效. Step 2: httpd.conf文件 DocumentRo

APache网站服务配置访问控制和构建虚拟主机

博文目录一.Httpd服务的访问控制1.客户机地址限制2.用户授权限制二.构建虚拟Web主机三.配置基于域名的虚拟主机四.配置基于IP地址的虚拟主机五.配置基于端口号的虚拟主机 一.Httpd服务的访问控制 为了更好地控制对网站资源的访问.可以为特定的网站目录添加访问授权.主要分为客户机地址限制和用户授权限制,这两种访问控制方式都应用于httpd.conf配置文件中的目录区域范围内. 1.客户机地址限制 通过Require配置项,可以根据主机的主机名或IP地址来决定是否允许客户端访问.在http

apache2.4.X虚拟主机配置

1,用记事本打开apache目录下httpd文件(如:D:\wamp\bin\apache\apache2.2.8\conf),找到如下模块 # Virtual hosts #Includeconf/extra/httpd-vhosts.conf 去掉前面的#,这样就开启了httpd-vhosts虚拟主机文件.这时候重启wamp环境,无法打开localhost,需要在httpd-vhosts.conf配置一下. 2,打开host文件(C:\WINDOWS\system32\drivers\etc

Apache与PHP的结合配置、Apache默认虚拟主机

Apache和PHP结合 配置httpd支持php 1. 修改配置文件: [[email protected] php-7.1.6]# vim /usr/local/apache2.4/conf/httpd.conf 修改一: 修改httpd的主配置文件/usr/local/apache2.4/conf/httpd.conf,搜索ServerName,把#ServerName www.example.com:80前面的#号删除. 找到如下内容更改: <Directory /> AllowOve

手动配置wamp环境(5)--虚拟主机的配置

基础地址的更改 网站的根目录 DocumentRoot "e:/website" 目录权限 Directory "e:/website" DirectoryIndex //设置默认首页 提示:默认网站的文件名通常为index.php 虚拟主机的配置 打开包含主配置文件(httpd-vhosts.conf),去掉httpd.conf 文件中473的#注释 虚拟主机的主配置文件 详细配置 打开主配置文件,留下主要内容 基于域名的虚拟主机配置 NameVirtualHos

配置nginx的独立虚拟主机文件

主配置文件为nignx.conf,主配置文件包含的所有配置文件统一放入extra目录,虚拟主机的配置文件起名为nginx_vhosts.conf,也可以把每个虚拟主机配置成一个单独的配置文件. [[email protected]]# pwd /application/nginx/conf [[email protected]]# mkdir extra [[email protected]]# vi nginx.conf  #内容如下 user  nginx  nginx; worker_pr