前面的文章中,我们学习了apache的基本使用,apache的配置文件,以及使用apache实现LAMP的架构,并搭建博客,也探讨了编译LAMP实现架构的方式。
在我们之前的探讨中,一直使用的是ip作为访问网站的方式, 但事实上我们访问百度,访问其他网站都是访问的域名,而非IP。 在讨论宝塔面板的章节的时候,我们还使用了ip+端口号的形式访问。
那么除了用ip或者ip加端口的形式访问之后,还有别的方式吗,今天我们就来聊一聊,虚拟主机的那些事。
百度百科的定义是这样的:
在一个Apache服务器上可以配置多个虚拟主机,实现一个服务器提供多站点服务,其实就是访问同一个服务器上的不同目录。一个服务器主机可以运行多个网站,每个网站都是一个虚拟主机。
我们都知道Linux当中一切皆为目录,那么我们访问一个网站,到底访问的是什么?
比如我们搭建好了dz论坛,访问IP或者域名, apache配置文件里指定了路径
上图可以看出,当我们访问bbs.zmkjedu.com的时候,实际上是访问的黄色框里的路径,默认访问index.php
到这里我们就明白了,当我们访问网站的时候,我们其实是访问了一个目录里的文件。
那虚拟主机又是什么意思呢?
简单点说,虚拟主机就是不同的访问目录里的文件。
如图所示当我们访问www.zmkjedu.com和访问bbs.zmkjedu.com的时候,访问的路径不一样,所以访问的文件就不一样。
上图也是在apache的配置文件里面,但是路径不同,访问的是二级域名zh.zmkjedu.com
那么虚拟主机除了基于域名,还有什么样的方式
Apache虚拟主机的实现方式有3种。
<VirtualHost *:80> #服务器ip和端口
DocumentRoot "/var/www/html/" #站点目录
ServerName www.cq.com #域名
ServerAlias #给虚拟主机增加多个域名,上面网址的别名
<Directory "/var/www/html"> #对根目录行为的限制
Options FollowSymLinks ExecCGI #followsymlinks表示允许使用符号链接,默认为禁用
AllowOverride None #表示禁止用户对目录配置文件(.htaccess进行修改)重载,普通站点不建议开启
Order allow,deny #是否显示列表 (在发布项目后一般是不启用,对于这个配置,针对DocumentRoot在apachede的默认文件夹外的目录生效。比如下面的例一 )
Allow from all
#Deny from all #拒绝所有的访问
Require all granted
</Directory>
</VirtualHost>
需要注意的是,每次写这个配置的时候,不需要所有的都写,就像我上面的例子一样,只写三行也可以。
将不同的网站挂在不同的IP上,访问不同的IP,所看到的是不同网站.因为一般服务器没那么多公网IP,而且大家一般都是用域名访问的,所以这种情况,我们做实验的时候会用,内网测试的时候会用,公司一般不用
[root@gaosh-1 ~]# ifconfig |grep inet
inet addr:192.168.1.22 Bcast:192.168.1.255 Mask:255.255.255.0
inet6 addr: fe80::20c:29ff:fed9:e81/64 Scope:Link
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
[root@gaosh-1 ~]#
[root@gaosh-1 ~]# ifconfig eth0:0 192.168.1.23
[root@gaosh-1 ~]# ifconfig |grep inet
inet addr:192.168.1.22 Bcast:192.168.1.255 Mask:255.255.255.0
inet addr:192.168.1.23 Bcast:192.168.1.255 Mask:255.255.255.0
[root@gaosh-1 ~]# vim /etc/httpd/conf/httpd.conf
方便复制版
<VirtualHost 192.168.1.22:80>
DocumentRoot /var/www/html/zmgaosh22
</VirtualHost>
<VirtualHost 192.168.1.23:80>
DocumentRoot /var/www/html/zmgaosh23
</VirtualHost>
[root@gaosh-1 ~]# service httpd restart
[root@gaosh-1 ~]# mkdir -p /var/www/html/zmgaosh22
[root@gaosh-1 ~]# mkdir -p /var/www/html/zmgaosh23
[root@gaosh-1 ~]# echo '192.168.1.22 我是高胜寒22' > /var/www/html/zmgaosh22/index.html
[root@gaosh-1 ~]# echo '192.168.1.23 我是高胜寒23' > /var/www/html/zmgaosh23/index.html
[root@gaosh-1 ~]#
测试:
[root@gaosh-1 ~]# elinks -source 192.168.1.22
192.168.1.22 我是高胜寒22
[root@gaosh-1 ~]# elinks -source 192.168.1.23
192.168.1.23 我是高胜寒23
[root@gaosh-1 ~]#
[root@gaosh-1 ~]# vim /etc/httpd/conf/httpd.conf
Listen 80
Listen 81
<VirtualHost 192.168.1.22:80>
DocumentRoot /var/www/html/zmgaosh22
</VirtualHost>
<VirtualHost 192.168.1.23:81>
DocumentRoot /var/www/html/zmgaosh23
</VirtualHost>
[root@gaosh-1 ~]# service httpd restart
[root@gaosh-1 ~]# elinks -source 192.168.1.22:80
192.168.1.22 我是高胜寒22
[root@gaosh-1 ~]# elinks -source 192.168.1.23:81
192.168.1.23 我是高胜寒23
[root@gaosh-1 ~]#
<VirtualHost 192.168.1.22:80>
DocumentRoot /var/www/html/zmgaosh22
ServerName www.zmgaosh22.com
</VirtualHost>
<VirtualHost 192.168.1.23:80>
DocumentRoot /var/www/html/zmgaosh23
ServerName www.zmgaosh23.com
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.1.22 www.zmgaosh22.com
192.168.1.23 www.zmgaosh23.com
[root@gaosh-1 ~]# service httpd restart
[root@gaosh-1 ~]# elinks -source www.zmgaosh22.com
192.168.1.22 我是高胜寒22
[root@gaosh-1 ~]# elinks -source www.zmgaosh23.com
192.168.1.23 我是高胜寒23
[root@gaosh-1 ~]#
虚拟主机在配置基于域名和基于端口的用的比较多,需要熟练掌握。
我是高胜寒,一个在教培行业不忘初心的人。