访问web服务,本质上看(从协议上)是访问某个IP的主机上的某个端口(默认是80)
通常需要通过访问不同的域名或者端口实现对不同网站的访问(具体到服务器里就是不同目录),这个时候就需要设置虚拟主机(VirtualHost).通常分为这样3种:
基于域名,基于端口,基于IP,以及它们的混合
准备工作:
在apache的主目录/var/www/html/下分别建立四个文件夹s1,s2,s3,s4,在里面建立不同网站的主页文件,如s1下面建立index.html内容为this is s1, s2下面建立index.html内容为this is s2,依此类推.
配置server的bind服务,为它添加2个域名s1.domain1.com, s2.domain1.com,.(其实是完全按我之前写的DNS设置的文章配的,只做了小小的改动而已)将客户机的DNS指向server,在客户机上ping 这2个域名都能返回正确的IP.
另外注意一点:每次修改配置文件httpd.conf之后apache要重新启动,才能使配置生效
下面是每种虚拟主机的配置过程
1.基于域名
这是一种最通用的情况,已经给服务器设置了多个域名,然后希望访问不同的域名来访问不同的网站文件.
修改httpd.conf的配置
# Use name-based virtual hosting.
#
NameVirtualHost * 表示在apache监听的所有IP和所有端口(此时只有80)上做多域名虚拟主机
<VirtualHost *>
    ServerAdmin xxx@xxx.com
    DocumentRoot /var/www/html/s1
    ServerName s1.domain1.com
    ErrorLog logs/ error_log
    TransferLog logs/ access_log
</VirtualHost>
<VirtualHost *>
    ServerAdmin xxx@ixxx.com
    DocumentRoot /var/www/html/s2
    ServerName s2.domain1.com
    ErrorLog logs/error_log
   TransferLog logs/access_log
</VirtualHost>
测试虚拟主机配置
[root@server1 conf]# ../bin/httpd -S
VirtualHost configuration:
wildcard NameVirtualHosts and _default_ servers:
*:*                    is a NameVirtualHost
         default server s1.domain1.com (/usr/local/apache2/conf/httpd.conf:1066)
         port * namevhost s1.domain1.com (/usr/local/apache2/conf/httpd.conf:1066)
         port * namevhost s2.domain1.com (/usr/local/apache2/conf/httpd.conf:1075)
Syntax OK
说明语法没问题,然后在测试机上访问这两个域名:s1.domain1.com和s2.domain1.com可以看到各自的页面
问题:如果以IP访问,看到的是什么?
是s1的页面,注意上面的这段话
*:*                    is a NameVirtualHost
default server s1.domain1.com
意思十分明显,我们在*:*(apache监听的任意IP任意端口上)做了多域名虚拟主机,而s1.domain1.com是这个缺省的服务器.也就是说访问*:*,除非访问的是我们设置的域名,否则默认会转向到s1.domain1.com.
2.基于端口
通过访问同一个IP(或者域名)的不同端口来访问到不同的文件
对httpd.conf做如下修改
增加监听口
Listen 80
Listen 81
将之前做的多域名虚拟主机去掉(因为此时是用IP加端口来访问的),即
# Use name-based virtual hosting.
#
# NameVirtualHost *    注释掉这句话
以下是虚拟主机配置(注意下面的配置部分我并没用ServerName字段)
<VirtualHost *:80>
    ServerAdmin xxx@xxx.com
    DocumentRoot /var/www/html/s1
    ErrorLog logs/error_log
    TransferLog logs/ access_log
</VirtualHost>
<VirtualHost *:81>
    ServerAdmin xxx@xxx.com
    DocumentRoot /var/www/html/s2
    ErrorLog logs/ error_log
    TransferLog logs/ access_log
</VirtualHost>
验证虚拟主机配置
[root@server1 conf]# ../bin/httpd -S
VirtualHost configuration:
wildcard NameVirtualHosts and _default_ servers:
*:80                   192.168.0.111 (/usr/local/apache2/conf/httpd.conf:1065)
*:81                   192.168.0.111 (/usr/local/apache2/conf/httpd.conf:1074)
Syntax OK
在客户端通过访问IP:80和IP:81看到不同页面
混合实验
看到这里我们就可以做一个稍微复杂的实验,在不同的端口上做不同域名的访问.例如
在80上访问s1.domain1.com和s2.domain1.com
在81上访问s3.domain2.com和s4.domain2.com当然这样访问是要带端口号的,上面因为是80默认端口所以不需要写端口号
访问这四个域名+端口分别访问到不同的页面.
配置过程
首先在bind上增加两个域名指向服务器. s3.domain2.com,s4.domain2.com,增加之后记得要重启bind.
然后修改httpd.conf文件
增加监听口
Listen 80
Listen 81
虚拟主机设置
# Use name-based virtual hosting.
#
NameVirtualHost *:80
NameVirtualHost *:81
表示要在本机的所有IP的80和81上面做多域名(NameVirtualHost:即为名称虚拟主机的意思)
<VirtualHost *:80>
    ServerAdmin xxx@xxx.com
    DocumentRoot /var/www/html/s1
    ServerName s1.domain1.com
    ErrorLog logs/ error_log
    TransferLog logs/ access_log
</VirtualHost>
<VirtualHost *:80>
    ServerAdmin xxx@xxx.com
    DocumentRoot /var/www/html/s2
    ServerName s2.domain1.com
    ErrorLog logs/ error_log
    TransferLog logs/access_log
</VirtualHost>
<VirtualHost *:81>
    ServerAdmin xxx@xxx.com
    DocumentRoot /var/www/html/s3
    ServerName s3.domain2.com
    ErrorLog logs/error_log
    TransferLog logs/access_log
</VirtualHost>
<VirtualHost *:81>
    ServerAdmin xxx@xxx.com
    DocumentRoot /var/www/html/s4
    ServerName s4.domain2.com
    ErrorLog logs/error_log
    TransferLog logs/access_log
</VirtualHost>

原文地址:http://hi.baidu.com/lenvol/blog/item/0bbb6f624bfe63ce8db10d90.html

深入理解Apache虚拟主机相关推荐

  1. Linux下Apache虚拟主机配置

    说明: Apache版本:httpd-2.2.31 Apache安装目录:/usr/local/apache 目的: 配置Apache虚拟主机 具体操作: 1.修改Apache主配置文件 cp /us ...

  2. Apache虚拟主机(转)

    2019独角兽企业重金招聘Python工程师标准>>> 经常使用Apache虚拟主机进行开发和测试,但每次需要配置虚拟主机时都习惯性的ctrl+c和ctrl+v,这次由于重装系统,需 ...

  3. apache 虚拟主机如何配置

    apache 虚拟主机如何配置?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题.  apache虚拟主机就是在apache服务器上配置多个虚 ...

  4. Ubuntu 16.04与Apache虚拟主机配置的步骤详解

    这篇文章主要给大家介绍了关于Ubuntu 16.04与Apache虚拟主机配置的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用ubuntu16.04系统具有一定的参考学习价值,需要的朋友 ...

  5. 给Apache虚拟主机增加端口的方法

    这篇文章主要介绍了给Apache虚拟主机增加端口的方法,修改配置的方法很简单,需要的朋友可以参考下 找到你的apache安装目录,找到httpd.conf文件, 搜索#listen这一句,在下面增加 ...

  6. Apache 虚拟主机 VirtualHost 配置

    虚拟主机 (Virtual Host) 是在同一台机器搭建属于不同域名或者基于不同 IP 的多个网站服务的技术. 可以为运行在同一物理机器上的各个网站指配不同的 IP 和端口, 也可让多个网站拥有不同 ...

  7. 关于apache虚拟主机htttpd的配置实例 (更新中)

    关于apache虚拟主机htttpd的配置实例(更新中) 前提: 首先使用虚拟主机我们需要关闭取消中心主机 #vim/etc/httpd/conf/httpd.conf中查找DocumentRoot加 ...

  8. linux虚拟主机泛解析,Apache虚拟主机的配置和泛域名解析实现代码

    Apache虚拟主机的配置和泛域名解析实现代码 更新时间:2012年03月11日 00:28:19   作者: Apache虚拟主机的配置和泛域名解析实现代码,需要的朋友可以参考下 虚拟主机的配置 基 ...

  9. 如何配置Apache虚拟主机?(基于IP、基于端口、基于域名)

    一.Apache虚拟机配置前的准备工作 1.下载yum源 2.安装yum包 3.安装httpd包 4.查看并关闭selinux 5.取消中心主机 cd /etc/httpd/conf vim http ...

最新文章

  1. android google 下拉刷新 csdn,android SwipeRefreshLayout google官方下拉刷新控件
  2. TrayIcon 类 添加系统托盘不显示托盘图标
  3. 整理的16个有用的jQuery Form(表单)验证教程
  4. python学习之——利用urllib2抓取网页内容
  5. 世界四大重要检索系统简介
  6. ubuntu修改用户名、计算机名、主目录名
  7. php上传图片并显示代码,php图片上传代码(完整版已测试)
  8. 最简洁的方式,实现web端百度地图一键定位导航
  9. 添加中文菜单项出现乱码的解决办法
  10. 几种Intent 的用法
  11. java对文件进行删除操作_Java删除文件夹和文件
  12. 2018年高教社杯全国大学生数学建模竞赛题目A题   高温作业专用服装设计
  13. 电阻电容等封装对应功率
  14. python Numpy中的array函数讲解及各参数含义
  15. Android仿高德地图打车的三段式BottomSheet
  16. 车载TBOX,4G北斗/GPS双模定位
  17. 华为独家承建波兰P4 UMTS网络
  18. asp.net 设计音乐网站
  19. 删除Karabiner-Elements 和 Karabiner-EventViewer提示项目被锁定
  20. python爬虫入门——13行代码制作英语翻译器教程,小白入门一点通

热门文章

  1. ACM-ICPC Jiaozuo Onsite 2018 Resistors in Parallel (思维+java大数+找规律)
  2. 在Linux系统下载与安装Nginx
  3. NoHttp的学习使用
  4. 【HTML 教程系列第 14 篇】什么是 HTML 中的有序列表 ol
  5. 航空航天与国防行业乘客体验—了解如何交付个性化并实现盈利 | 达索系统百世慧®
  6. Python官方中文文档上线了,不用再苦寻民间汉化组了
  7. 基恩士KV7500,基恩士触摸屏,搭载KV-SH04PL四轴运动控制模块,KV-C32XDT.
  8. 来给美剧比个 yeah! ——最最值得一看的科幻
  9. 如何查看已安装的Linux内核
  10. CAD图块无法分解怎么办?CAD块分解教程