11.16/11.17 Apache默认虚拟主机

时间:2022-04-27
本文章向大家介绍11.16/11.17 Apache默认虚拟主机,主要内容包括httpd的默认虚拟主机目录概要、虚拟主机常识、测试虚拟主机、总结、基本概念、基础应用、原理机制和需要注意的事项等,并结合实例形式分析了其使用技巧,希望通过本文能帮助到大家理解应用这部分内容。

httpd的默认虚拟主机目录概要

  • 一台服务器可以访问多个网站,每个网站都是一个虚拟主机
  • 概念:域名(主机名)、DNS、解析域名、hosts
  • 任何一个域名解析到这台机器,都可以访问的虚拟主机就是默认虚拟主机
  • vim /usr/local/apache2/conf/httpd.conf //搜索httpd-vhost,去掉#
  • vim /usr/local/apache2/conf/extra/httpd-vhosts.conf //改为如下 <VirtualHost *:80> ServerAdmin admin@aminglinux.com DocumentRoot "/data/wwwroot/aming.com" ServerName aming.com ServerAlias www.aming.com ErrorLog "logs/aming.com-error_log" CustomLog "logs/aming.com-access_log" common

</VirtualHost> <VirtualHost *:80> DocumentRoot "/data/wwwroot/www.123.com" ServerName www.123.com </VirtualHost> - /usr/local/apache2/bin/apachectl –t - /usr/local/apache2/bin/apachectl graceful ## 默认虚拟主机 - 默认虚拟主机,可以理解成Apache(也就是httpd),一个服务下面跑多了多个网站,跑了多个域名 - 例子,假如在服务器上,它既能访问百度,又能访问谷歌,这是两个不同的网站,但同时都在一台服务器运行着,就用了一个httpd的服务,这个就是一个网站多个域名,每一个域名对着一个虚拟主机 ## 更改hosts - 在windows下去写hosts 1. hostsl路径地址,这个和linux下的hosts类似 1. 打开物理机C盘 2. 然后选择Windows 3. 再选择System32 4. 选择dirvers 5. 选择etc 6. 选择hosts

  1. 可以在这个里面定义一个IP,定义一个域名,然后让这个域名指向到这个IP上去
  2. 打开方式选择 记事本
  3. 打开文件,会看到windows下的hosts
  1. 然后在hosts文件中,任何一处位置加入一行,然后保存!
  • 格式:先IP,然后空格,加域名——>域名可以写多个,一行里面可以有多个域名
    • 这个IP地址为虚拟机的IP
192.168.202.130  www.abc.com www.123.com
  1. 然后物理机去ping 网址,能看到都能ping通
  1. 正常情况下,不写hosts,去ping——>将hosts中添加的一行注释掉
# 192.168.202.130  www.abc.com www.123.com
  1. 然后再去物理机去ping www.abc.com,会看到IP是公网IP
  1. 这个就是hosts的作用,它的目的就是让你临时访问到一个服务器上去
  • 比如用www.abc.com,用www.123.com把这个域名指向到这台机器上去——>这是在DNS还没有生效的时候使用
  1. 这时候在将hosts中加入的那一行# 去掉
192.168.202.130  www.abc.com www.123.com
  1. 然后用物理机中的浏览器去访问www.abc.com或www.123.com,会看到正常访问
  1. 浏览器去访问www.123.com/1.php,会看到正常访问
  1. 或许会有一个疑问,123.com和abc.com,包括这个IP并没有在httpd的配置文件中去定义它,在配置文件中仅仅定义了 www.example.com这个域名,这个叫做Apache的默认主机 ,也就是说,任何一个域名,指向到这个 IP ,它都会访问到这个站点,这个站点就叫做默认虚拟主机——>注意:是虚拟主机
  • 如果没有做任何操作,仅仅使用了httpd.conf,它实际上就是主配置文件定义的这个ServerName,以DocumentRoot ,但这样不太好管理,毕竟一台服务器上可以跑多个域名,若不想域名都指向到这里,所以需要打开一个虚拟主机配置文件
  1. 打开虚拟主机,在/usr/local/apache2.4/conf/httpd.conf 配置文件中
[root@hf-01 ~]# vim /usr/local/apache2.4/conf/httpd.conf

搜索/extra 关键词,这一行就做虚拟主机
# Virtual hosts
#Include conf/extra/httpd-vhosts.conf

把#Include conf/extra/httpd-vhosts.conf前面的 #号 去掉 Include conf/extra/httpd-vhosts.conf
# Virtual hosts
Include conf/extra/httpd-vhosts.conf
  1. 因为配置文件仅仅能定义一个ServerName,所以现在打开一个二级配置文件
  • 二级配置文件就是虚拟主机配置文件
    • 在这个配置文件里,是可以定义多个ServerName的
[root@hf-01 ~]# vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf     //虚拟主机配置文件

在打开配置文件,会发现有两个<VirtualHost *:80> ,每一个<VirtualHost >都是一对出现的,每一个<VirtualHost >都代表着一个主机,一个主机就是一个网站

<VirtualHost *:80>
    ServerAdmin webmaster@dummy-host.example.com    //定义管理员的邮箱——>可删除
    DocumentRoot "/usr/local/apache2.4/docs/dummy-host.example.com"    //定义网站的根目录在哪里
    ServerName dummy-host.example.com    //服务器名字
    ServerAlias www.dummy-host.example.com    //定义别名,别名就是一个网站可以有多个域名访问,比如可以是abc.com访问,也可以是www.abc.com访问,访问的内容是一致的
    ErrorLog "logs/dummy-host.example.com-error_log"    //错误日志
    CustomLog "logs/dummy-host.example.com-access_log" common    //访问日志
</VirtualHost>

<VirtualHost *:80>
    ServerAdmin webmaster@dummy-host2.example.com
    DocumentRoot "/usr/local/apache2.4/docs/dummy-host2.example.com"
    ServerName dummy-host2.example.com
    ErrorLog "logs/dummy-host2.example.com-error_log"
    CustomLog "logs/dummy-host2.example.com-access_log" common
</VirtualHost>
  1. 在打开虚拟主机配置文件后,做一个更改
  • 更改后
<VirtualHost *:80>
    DocumentRoot "/data/wwwroot/abc.com"   
    ServerName abc.com
    ServerAlias www.abc.com www.123.com
    ErrorLog "logs/abc.com-error_log"
    CustomLog "logs/abc.com-access_log" common
</VirtualHost>

<VirtualHost *:80>
    DocumentRoot "/data/wwwroot/111.com"
    ServerName 111.com
    ServerAlias www.example.com        //验证
    ErrorLog "logs/111.com-error_log"
    CustomLog "logs/111.com-access_log" common
</VirtualHost>
然后保存退出
  1. 更改完配置文件,就去创建对应的目录
[root@hf-01 ~]# mkdir /data/wwwroot/
[root@hf-01 ~]# mkdir /data/wwwroot/abc.com
[root@hf-01 ~]# mkdir /data/wwwroot/111.com
[root@hf-01 ~]# 
  1. 在对应的站点根目录下创建,定义一个php
[root@hf-01 ~]# vim /data/wwwroot/abc.com/index.php

在文件中写入
<?php
echo "abc.com";

并保存退出
  1. 然后在/data/wwwroot/111.com/index.php中也定义一个php
[root@hf-01 ~]# vim /data/wwwroot/111.com/index.php

在文件中写入
<?php
echo "111.com";

并保存退出
  1. 在定义完之后,去检查服务是否有错误
[root@hf-01 ~]# /usr/local/apache2.4/bin/apachectl -t
Syntax OK
[root@hf-01 ~]# 
  1. 然后重新加载配置文件
[root@hf-01 ~]# /usr/local/apache2.4/bin/apachectl graceful
[root@hf-01 ~]# 
  1. 定义一个网站最核心的参数就是网站的根目录在哪里,访问的域名是什么,ServerName只能写一个,而ServerAlias可以写多个域名

虚拟主机常识

  • 一旦让虚拟主机配置文件生效了,那么之前定义的www.example.com就会失效了

测试虚拟主机

  • curl -x命令
  1. 比如说,现在要访问abc,com,若不去绑定hosts,那么在虚拟机中ping www.abc.com会ping到外网上去,并没有在这台机器上。若想要访问abc.com在在这台机器上,可以编辑/etc/hosts文件去指定下,或者使用curl -x选项
[root@hf-01 ~]# curl -x192.168.74.129:80 abc.com
abc.com[root@hf-01 ~]# curl -x192.168.74.129:80 www.abcd.com
abc.com[root@hf-01 ~]# curl -x192.168.74.129:80 www.abcde.com
abc.com[root@hf-01 ~]# 
  • 在访问abcd.com,会发现访问的还是abc.com,这个之前无论把任何域名指向到192.168.74.129这台机器上,都会访问到htdocs目录下面去,但现在发生了转变,无论什么域名指向过来,它都会访问到abc.com,abc.com是我们虚拟主机配置文件里边的第一个虚拟主机,它就是默认虚拟主机。
    • 默认虚拟主机,就是无论访问什么域名,只要解析到192.168.74.129IP上,它都会访问这个网站对应的虚拟主机配置(这个默认虚拟主机就是abc.com)
  1. 这时再来访问www.example.com
abc.com[root@hf-01 ~]# curl -x192.168.74.129:80 www.example.com
111.com[root@hf-01 ~]# 
  • 在httpd主配置文件中有定义,在Virtual hosts虚拟主机中也有定义,结果访问到了111.com

总结

  1. 在主配置文件中,httpd.conf里面,打开了虚拟主机配置文件,也就是删除到 # 号,那虚拟主机配置就生效了,一旦虚拟主机配置文件生效,那主配置文件里面所定义的DocumentRoot以及ServerName失效
  2. 虚拟主机配置文件一旦打开,可以定义很多个VirtualHost,每一个VirtualHost都都有一个对应的 DocumentRoot 和 ServerName ,每一个VirtualHost都代表着一个站点,都是一个虚拟主机。在虚拟主机里面有一个特殊的默认虚拟主机,所谓默认虚拟主机就是无论任何域名解析到这个IP上,都会去访问默认虚拟主机

随机文章