11.16/11.17 Apache默认虚拟主机

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上,都会去访问默认虚拟主机

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Youngxj

免流集成破解版授权 一键备份数据库 网页端防DDOS脚本 等21个集成脚本

1.1K5
来自专栏大数据-Hadoop、Spark

Logstash+Kafka+ZK集群整合

2134
来自专栏我的小碗汤

5个小视频替你说出心里话,含源码

今天情人节是不是被撒狗粮了呢,朋友圈各种各样的秀,也看惯不惯了,我们来看几个别样的小视频,让他们秀去吧!

1784
来自专栏编程软文

tomcat日志神器--kibana

最近公司搭了套kibana的日志系统,感受比原来查看日志方便多了。记得以前查看日志是通过ssh到服务器,查看系统日志用vi查看器查看或者下载到本地,用logvi...

1022
来自专栏十月梦想

phpstudy配置多端口虚拟主机

找到phpstudy安装目录进入apache文件夹下的conf文件夹打开vhost.conf,新增一下配置

1774
来自专栏Laoqi's Linux运维专列

Apache默认虚拟主机

Apache默认虚拟主机 : 什么是虚拟主机?当你的一台服务器上面运行多个多个网站,每个网站都是一个虚拟主机! 任何一个域名解析到这台机器,都可以访问的虚拟主机...

5637
来自专栏我的博客

Centos7安装LAMP+PHPmyadmin

1、更新Centos7下载源 更新之前记得备份!!! wget -O /etc/yum.repos.d/CentOS-Base.repo http://mi...

4255
来自专栏小狼的世界

Filebeat+Logstash+ElasticSearch+Kibana搭建Apache访问日志解析平台

对于ELK还不太熟悉的同学可以参考我前面的两篇文章ElasticSearch + Logstash + Kibana 搭建笔记、Log stash学习笔记(一)...

1331
来自专栏区块链入门

Postman接口测试神器从安装到精通

Postman 是一个接口测试和 http 请求的神器,非常好用。 官方 github 地址: https://github.com/postmanlabs

6844
来自专栏程序猿

Windows Server 2008 R2 搭建微信小程序

注意哦~,Windows Server 2003不能部署微信小程序哦~,想要部署小程序请升级2008 R2及以上版本。 买在国内的云服,Windows 和 Li...

1.3K7

扫码关注云+社区

领取腾讯云代金券