Apache 默认虚拟主机

Apache 默认虚拟主机
Apache 默认虚拟主机

上一节中说到,在 /usr/local/apache2.4/htdocs/ 下面能够访问到 1.php 和 index.html 这两个文件,这是为何呢?
输入命令 vim /usr/local/apache2.4/conf/httpd.conf,搜索 /htdocs,回车,见下图,
Apache 默认虚拟主机
上图红色框框的内容显示,就是由于参数 DocumentRoot 定义了网站的目录在哪里。接着搜索 /ServerName,回车,见下图,
Apache 默认虚拟主机
上图红色框框的内容显示,由于参数 ServerName 定义了网站的域名,只不过这个 ServerName 能够用任何域名去访问。
Windows 和 Linux 的 htdocs 基本上是类似的,因此这边先演示一下,怎么在Windows上写htdocs,hosts 的文件路径见下图,
Apache 默认虚拟主机
右击 hosts 文件,选择打开方式,再选中记事本,点击肯定,进入见下图,
Apache 默认虚拟主机
增长一行 IP 地址和域名,见下图红色框框,
Apache 默认虚拟主机
而后保存。保存这边会有一些问题 ,须要管理员权限才能够保存,这边能够尝试,复制一个文件到桌面上,而后进行上面的更改,再把原文件删除掉,把桌面上的更改好的文件放进去。
完成以后,打开Windows的cmd,尝试ping一下这两个域名,见下图,
Apache 默认虚拟主机
能够看到,IP 是192.168.218.128,没错了。正常状况下,不更改hosts文件的话,看到的就是下图这种状况了,
Apache 默认虚拟主机
能够看到,IP 地址明显就变成官网的 IP 了。
以上就是hosts这个文件的做用,能够访问到指向的IP。这个状况在DNS尚未生效的时候可使用。
在 www.abc.com 域名指向 192.168.218.128 这个 IP 的时候,来访问一下这个网站,见下图,
Apache 默认虚拟主机
出现的也是“It works!”,接着访问一下,www.abc.com/1.php ,回车,见下图,
Apache 默认虚拟主机
包括 www.123.com/1.php ,也是同样的,见下图,
Apache 默认虚拟主机
上面操做的这两个域名和IP地址,咱们都没有到配置文件里去定义,仅仅只是定义了 ServerName www.example.com:80 这个域名,为何均可以访问?
Apache 默认虚拟主机
这个就叫作 apache 的默认主机,也就是说任何一个域名,只要指向了这个 IP,都会访问到这个站点,这个站点就叫作默认虚拟主机。若是没有作任何操做,仅仅使用的是 httpd.conf 配置文件里面定义的这个 ServerName www.example.com:80 以及 DocumentRoot,
Apache 默认虚拟主机
这样就会不太好管理,毕竟一台服务器能够跑多个域名,不必定要指向到这边。因此,咱们须要打开一个虚拟主机的配置文件,输入命令 vim /usr/local/apache2.4/conf/httpd.conf,搜索 /extra,回车,找到下图,
Apache 默认虚拟主机
红色框框里面就是虚拟主机,把下面那行的#号去掉,保存并退出。也就是说,前面的 htdocs、DocumentRoot 和 ServerName 等所有不用了,由于这一个配置文件里面只能定义一个 ServerName,确定是不合适的。
如今打开一个二级配置文件,就是虚拟主机的配置文件,在这个配置文件里是能够定义多个 ServerName,输入命令 vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf,回车,往下翻,见下图,
Apache 默认虚拟主机
两个框框的内容都是以 <VirtualHost :80> 开头,以 <VirtualHost :80> 结尾,表示一个主机,也就是一个网站。这边须要作一些更改,ServerAdmin 用来定义管理员的邮箱,要不要都无所谓,能够删掉。DocumentRoot 定义网站和目录在哪里,能够从新定义。ServerName 定义网站的域名,只能写一个域名。ServerAlias 定义网站的别名,能够写多个域名。ErrorLog 指定错误日志,CustomLog 指定访问日志。这样子就定义了一个网站,具体见下图,
Apache 默认虚拟主机
保存并退出,这边定义的虚拟主机,一旦生效,以前在 httpd.conf 里定义的 www.example.com 就失效了。
Apache 默认虚拟主机
接着完善一下刚才的设置,见下图,
Apache 默认虚拟主机
如今须要在对应的站点根目录下建立一个文件,输入命令 vim /data/wwwroot/abc.com/index.php ,回车,见下图,
Apache 默认虚拟主机
输入上图的内容,保存并退出。输入命令 vim /data/wwwroot/111.com/index.php ,回车,见下图,
Apache 默认虚拟主机
保存并退出。而后检查一下配置文件的语法,再加载配置文件。
Apache 默认虚拟主机
以上准备工做就完成了,接下来测试一下虚拟主机。
首先,若是域名没有绑定到 htdocs 上,ping 的时候就会链接到外网去,并无在本机内网上,见下图,
Apache 默认虚拟主机
因此,要想访问 www.abc.com 这个网站在本机上,能够编辑 vi /etc/hosts,指定一下。还有另外一种办法,这边介绍一个新命令 curl,-x 选项,输入命令 curl -x192.168.218.128:80 abc.com ,回车,见下图,
Apache 默认虚拟主机
效果很是明显,不管什么域名指向过来,访问的都是 abc.com,是虚拟主机配置里面的第一个虚拟主机,就是默认的虚拟主机。所谓默认虚拟主机,就是访问什么域名,只要解析到这个 IP 上,都会访问这个网站,访问这个网站对应的虚拟主机配置,也就是 abc.com。接着访问一下 example.com,见下图,
Apache 默认虚拟主机
这边111.com 是第二个虚拟主机的域名,访问的 www.111.com ,并非 111.com 的域名,因此访问到了第一个虚拟主机上去。只要搜索的域名不在咱们设置的配置上,就会匹配到第一个虚拟主机上。第一个就叫作默认的虚拟主机配置文件。
这边咱们也能够发现,只要开启了这边 VirtualHost 配置文件的虚拟主机,以前 httpd.conf 配置文件上的ServerName 和 DocmentRoot都会失效。
以上这么多内容就两个结论:
(1)、在主配置文件 httpd.conf 中,打开了 VirtualHost 虚拟主机的配置文件,这时候虚拟主机配置文件就生效了,而主配置文件里所定义的ServerName 和 DocmentRoot就会失效。
(2)、虚拟主机配置文件,一旦打开,里面能够定义不少个 VirtualHost 虚拟主机的配置文件,每一个 VirtualHost 里面都有对应的 ServerName 和 DocmentRoot,每一个 VirtualHost 都表明一个站点,都是一个虚拟主机。在虚拟主机里边有个比较特殊的状况,存在一个默认的虚拟主机,就是不管任何域名,只要不在其余虚拟主机上,就会解析到这个 IP上,都会访问到这个默认虚拟主机。php

相关文章
相关标签/搜索