【Linux】apache虚拟主机实战

前言

前面的文章中,我们学习了apache的基本使用,apache的配置文件,以及使用apache实现LAMP的架构,并搭建博客,也探讨了编译LAMP实现架构的方式。

在我们之前的探讨中,一直使用的是ip作为访问网站的方式, 但事实上我们访问百度,访问其他网站都是访问的域名,而非IP。 在讨论宝塔面板的章节的时候,我们还使用了ip+端口号的形式访问。

那么除了用ip或者ip加端口的形式访问之后,还有别的方式吗,今天我们就来聊一聊,虚拟主机的那些事。

一. 什么是虚拟主机

百度百科的定义是这样的:

在一个Apache服务器上可以配置多个虚拟主机,实现一个服务器提供多站点服务其实就是访问同一个服务器上的不同目录一个服务器主机可以运行多个网站,每个网站都是一个虚拟主机

我们都知道Linux当中一切皆为目录,那么我们访问一个网站,到底访问的是什么?
比如我们搭建好了dz论坛,访问IP或者域名, apache配置文件里指定了路径

在这里插入图片描述上图可以看出,当我们访问bbs.zmkjedu.com的时候,实际上是访问的黄色框里的路径,默认访问index.php

输入网址的时候,也会默认带着index.php
在这里插入图片描述

到这里我们就明白了,当我们访问网站的时候,我们其实是访问了一个目录里的文件。

那虚拟主机又是什么意思呢?

简单点说,虚拟主机就是不同的访问目录里的文件。

在这里插入图片描述
如图所示当我们访问www.zmkjedu.com和访问bbs.zmkjedu.com的时候,访问的路径不一样,所以访问的文件就不一样。

在这里插入图片描述
上图也是在apache的配置文件里面,但是路径不同,访问的是二级域名zh.zmkjedu.com

那么虚拟主机除了基于域名,还有什么样的方式

二. 虚拟主机类型

Apache虚拟主机的实现方式有3种。

  • 基于IP的虚拟主机
  • 基于端口的虚拟主机
  • 基于域名的虚拟主机

三. VirtualHost参数的意义

<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>

需要注意的是,每次写这个配置的时候,不需要所有的都写,就像我上面的例子一样,只写三行也可以。

四. 虚拟主机实战

1. 基于IP的虚拟主机

将不同的网站挂在不同的IP上,访问不同的IP,所看到的是不同网站.因为一般服务器没那么多公网IP,而且大家一般都是用域名访问的,所以这种情况,我们做实验的时候会用,内网测试的时候会用,公司一般不用

a. 虚拟机原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 ~]# 
b. 添加临时IP
[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
c.配置文件中添加虚拟主机

[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

d. 创建测试文件进行测试
[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 ~]# 
2. 基于端口的虚拟主机
a. 修改配置文件
[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>
b. 测试
[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 ~]# 
3. 基于域名的虚拟主机
a. 修改配置文件
<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

b. 修改hosts解析
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
c. 测试
[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 ~]# 

总结

虚拟主机在配置基于域名和基于端口的用的比较多,需要熟练掌握。
我是高胜寒,一个在教培行业不忘初心的人。

猜你喜欢

转载自blog.csdn.net/xinshuzhan/article/details/107622905